--[[ IMPORTS -- This is neccesary to use all the functions of SCAR]]
import("ScarUtil.scar") import("WXPScarUtil.scar")
--[[ GAME SETUP ]]
--[[ the OnGameSetup() function is mandatory! -- Here you should setup all your global variables, which can be used in any function.]] function OnGameSetup()
--[[Tweak these variables to change difficulty]] -- global timers g_SpawnDreadnoughtTimer = 350 -- 280 g_SpawnDefilerTimer = 270 g_SpawnShrineDaemonTimer = 180 g_MainBaseAttackTimer = 335 -- (320) spawns units to attack the players main base every X second g_MainBaseAttackTierTimer = 575 -- 400 tiers up so more/bigger units attack the players base every X seconds g_RecaptureLPTimer = 306 -- send out some chaos marines to retake lp's g_ResearchTimer = 425 -- fake research tiers are upgraded every X seconds g_SpawnHereticAndRepairSideBaseTimer = 18 -- heretic is spawned, turned on forced labor, and commanded to repair buildings in the dreadnaught base every X seconds -> CANNOT BE < 10 g_ShrineTierTimer = 350 g_RhinoCount_BalanceTweak = 2 g_WanderUnitAttackInterval = 8 -- every X squads, send one to the player. g_BloodThirsterFlyCoolDown = 45 -- bloodthirster can't fly again for X seconds after flying somewhere g_SpawnBloodthirsterFodderMaxTimer = 200 -- 200 max amount of time for another blood thirster fodder dude to spawn and run to a statue g_SpawnBloodthirsterFodderMinTimer = 30 -- (NOT USED RIGHT NOW) min amount of time for another blood thirster fodder dude to spawn and run to a statue g_PingShrinesEveryXSeconds = 200 -- ping the living shrines every X seconds g_OblitAndHorrorInPlayerBaseCooldown = 700 -- oblits and horrors can only drop in player bases every X seconds g_CityDBreachedTimer = 700 -- the patrols start out if the city isnt breached by this time
-- fake population g_MaxCultist = 4 g_MaxZerker = 1 g_MaxHorror = 2 g_MaxPosd = 1 g_MaxObliterator = 1 g_MaxPrince = 1 g_MaxBloodThirster = 1 g_MaxSorcerer = 1 g_MaxDefilers = 3 g_MaxDreadnoughts = 2 g_MaxHereticPop = 6 g_MaxPredator = 2 g_MaxSpaceMarine = 3 g_MaxRaptor = 3 g_MaxCapturePop = 3
--debug stuff g_Debug = false -- turns debug mode off and on. (turns on and off fog of war)
-- other global variables (DO NOT MODIFY) g_ChaosStormLevel = "chaos_warp_storm_1" g_ChaosStormDamageLevel = "chaos_warp_storm_damage_1" t_Shrines = {1, 2, 3, 4, 5} g_TotalShrines = 5 g_CultistCounter = 0 g_ZerkerCounter = 0 g_HorrorCounter = 0 g_PosdCounter = 0 g_ObliteratorCounter = 0 g_PrinceCounter = 0 g_WanderCounter = 0 g_PBACounter = 0 g_BloodThirsterCounter = 0 g_SorcererCounter = 0 t_ShrineBoom = {false, false, false, false, false} g_DefilerCounter = 0 g_DreadnoughtCounter = 0 g_DNWanderCounter = 0 g_HereticCounter = 0 g_BuildTurretFlag = false g_BaseAttackTier = 1 g_RaptorCounter = 0 g_SpaceMarineCounter = 0 g_PredatorCounter = 0 g_EmptyRhinos = 0 g_CaptureCounter = 0 g_ResearchCounter = 0 g_DefilerWanderCounter = 0 g_ForcedLaborFlag = false g_RightDNBaseFlag = false g_LeftDNBaseFlag = false g_FrontDNBaseFlag = false g_ShrineTier = 1 g_WanderUnitAttackCount = 0 g_JumpFlag = true g_CounterDisplay = 100 g_SecondaryObjectiveFlag = false t_ShrineIE={false, false, false, false, false} t_ShrinesAlive ={true, true, true, true, true} g_ping_obj_shrine = {0,0,0,0,0} g_InitialAttack = true g_OblitAndHorrorOKToDropFlag = true g_OblitAndHorrorCooldown = 0 g_OblitAndHorrorCounter = 0 g_FirstRecapture = true g_GlobalAttackPos = 0 g_CityDBreachedCounter = 0 g_PrimaryObjectives = 0 g_SecondaryObjectives = 0 -- generator markers start at 0 g_bonus_gen_counter = 0 -- turrer markers start at 6 g_bonus_turret_counter = 6
--[[defining the name of the player's faction]] if MetaMap_GetPlayerRaceName() == "chaos_marine_race" then factionname = "$3950214" colorscheme = "default_0" elseif MetaMap_GetPlayerRaceName() == "guard_race" then factionname = "$3950219" colorscheme = "default_4" elseif MetaMap_GetPlayerRaceName() == "ork_race" then factionname = "$3950215" colorscheme = "default_4" elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then factionname = "$3950213" colorscheme = "default_0" elseif MetaMap_GetPlayerRaceName() == "tau_race" then factionname = "$3950224" colorscheme = "default_4" elseif MetaMap_GetPlayerRaceName() == "eldar_race" then factionname = "$3950217" colorscheme = "default_5" elseif MetaMap_GetPlayerRaceName() == "necron_race" then factionname = "$3950223" colorscheme = "default_0" elseif MetaMap_GetPlayerRaceName() == "dark_eldar_race" then factionname = "$3950220" colorscheme = "default_1" elseif MetaMap_GetPlayerRaceName() == "sisters_race" then factionname = "$3900048" colorscheme = "default_2" end g_Player1 = Setup_Player(0, factionname, MetaMap_GetPlayerRaceName(), 0) Misc_PlayerTeamColor(g_Player1, colorscheme)
--setting up the upgrades for the commander MetaMap_UpdatePlayerWargear(g_Player1)
g_Player2 = Setup_Player(1, "$3950214", "chaos_marine_race", 1) -- wander g_Player3 = Setup_Player(2, "$3950214", "chaos_marine_race", 1) -- bloodthirster g_Player4 = Setup_Player(3, "$3950214", "chaos_marine_race", 1) -- stealth g_Player5 = Setup_Player(4, "$3950214", "chaos_marine_race", 1) -- defilers g_Player6 = Setup_Player(5, "$3950214", "chaos_marine_race", 1) -- air units g_Player7 = Setup_Player(6, "$3950214", "chaos_marine_race", 1) -- nowander g_Player8 = Setup_Player(7, "$3950214", "chaos_marine_race", 1) -- stealthseeing cultists Misc_PlayerTeamColor(g_Player2, "default_0") Misc_PlayerTeamColor(g_Player3, "default_0") Misc_PlayerTeamColor(g_Player4, "default_0") Misc_PlayerTeamColor(g_Player5, "default_0") Misc_PlayerTeamColor(g_Player6, "default_0") Misc_PlayerTeamColor(g_Player7, "default_0") Misc_PlayerTeamColor(g_Player8, "default_0")
end
--[[ the OnGameRestore() function is mandatory!, this will only get called after loading a game ]] function OnGameRestore() end
--[[This function runs first, here you can setup anything you want to happen before the game starts.]] function OnInit()
Rule_AddOneShot(Rule_CreateChaosBases, 0)
-- so lame.
OrientateShrines()
--NIS_Setup()
if g_Debug == false then
WXP_OpeningNISPreset( )
Util_StartNIS( EVENTS.NIS_Opening )
end
Rule_PresetAI()
--[[ Start Gameplay]]
Rule_Add( Rule_GameStart )
--[[Define Objective: Below is what lua script calls a blueprint, but is better known in C as a struct. This is a variable that contains other variables that can be referenced with dot notation (ie: Objective_Destroy_PowerGen.title_id will return 7000200)]]
Objective_DestroyStronghold = {title_id = 3950022, short_desc_id = 3950023 , help_tip_id =3950023}
Objective_DestroyDefilerBase = {title_id = 3950024, short_desc_id = 3950025 , help_tip_id =3950025}
Objective_DestroyDreadnaughtBase = {title_id = 3950026, short_desc_id = 3950027 , help_tip_id =3950027}
Objective_DestroyShrines = {title_id = 3950028, short_desc_id = 3950029 , help_tip_id =3950029}
end
--[[ the Scar_AddInit(OnInit) function is mandatory! This registers your init function with scar. ]] Scar_AddInit(OnInit)
--[[ PRESET AI ]]
function Rule_PresetAI()
--[[This function is called from OnInit() and start or stop the AI.]]
Cpu_Enable(g_Player2, false)
Cpu_SetDifficulty(g_Player2, AD_Standard)
Cpu_Enable(g_Player3, false)
Cpu_SetDifficulty(g_Player3, AD_Standard)
Cpu_Enable(g_Player4, false)
Cpu_SetDifficulty(g_Player4, AD_Standard)
Cpu_Enable(g_Player5, false)
Cpu_SetDifficulty(g_Player5, AD_Insane)
Cpu_Enable(g_Player6, false)
Cpu_SetDifficulty(g_Player5, AD_Insane)
Cpu_Enable(g_Player7, false)
Cpu_SetDifficulty(g_Player5, AD_Insane)
Cpu_Enable(g_Player8, false)
Cpu_SetDifficulty(g_Player5, AD_Insane)
--[[Cpu_EnableComponent(g_Player5, true, CT_Attacking)
Cpu_EnableComponent(g_Player5, true, CT_Tactics)
Cpu_EnableComponent(g_Player5, false, CT_BuildBuildings)
Cpu_EnableComponent(g_Player5, false, CT_BuildResearch)
Cpu_EnableComponent(g_Player5, false, CT_Defending)
Cpu_EnableComponent(g_Player5, false, CT_BuildUnits)
Cpu_EnableComponent(g_Player5, false, CT_BuildAddOns)
Cpu_EnableComponent(g_Player5, false, CT_Resourcing)]]
--[[Cpu_Enable(g_Player4, false)
Cpu_SetDifficulty(g_Player4, AD_Standard)
Cpu_EnableComponent(g_Player4, false, CT_Attacking)
Cpu_EnableComponent(g_Player4, false, CT_Tactics)
Cpu_Enable(g_Player5, false)
Cpu_SetDifficulty(g_Player5, AD_Standard)
Player_RestrictSquad(g_Player5, "necron_lord_squad")
Cpu_Enable(g_Player6, false)
Cpu_SetDifficulty(g_Player6, AD_Standard)
Cpu_EnableComponent(g_Player5, false, CT_Attacking)
Cpu_EnableComponent(g_Player5, false, CT_Tactics)
Cpu_EnableComponent(g_Player5, false, CT_BuildBuildings)
Cpu_EnableComponent(g_Player5, false, CT_BuildResearch)
Cpu_EnableComponent(g_Player4, false, CT_Resourcing)]]
end
--[[ MUSIC -- Called from Rule_GameStart()]]
function Rule_Start_Music()
--[[Starts the music]]
t_Chaos_stronghold_music = {"MU_IG_STR_Chaos_perc_str", "MU_IG_STR_Chaos",
"MU_IG_STR_Chaos_perc", "MU_IG_STR_Chaos_perc_brass"}
Playlist_Manager( PC_Music, t_Chaos_stronghold_music, true, true , {2, 4})
--[[Set ambient sounds]]
t_Chaos_stronghold_ambient = {"Ambience_ChaosCorruption1", "Ambience_ChaosCorruption2"}
Playlist_Manager( PC_Ambient, t_Chaos_stronghold_ambient, true, true , {5, 15})
end
--[[ START PLAY ]]
function Rule_GameStart()
if Event_IsAnyRunning() == false then
if g_Debug == true then
FOW_RevealAll()
end
--[[ Set resources for both players ]]
Player_SetAllResources(g_Player1, 1000, 300, 20)
-- Set Difficulty Level
DifficultyLevel()
-- Timer
Rule_UI_Game_Timer()
--Music
Rule_AddOneShot(Rule_Start_Music, 0)
-- Create Bases
Rule_AddOneShot(Rule_CreatePlayerBases, 0)
-- Objectives
-- Gameplay Rules
Rule_AddInterval(MainBaseAttackTier, g_MainBaseAttackTierTimer)
Rule_AddInterval(MainBaseAttack, g_MainBaseAttackTimer)
Rule_AddInterval(RecaptureLP, g_RecaptureLPTimer)
Rule_AddInterval(Rule_GrantResearch, g_ResearchTimer)
Rule_AddInterval(HereticSpawnAndRepair, g_SpawnHereticAndRepairSideBaseTimer)
Rule_AddInterval(ShrineTier, g_ShrineTierTimer)
--Initial/Setup
Rule_AddInterval(CityDefenseBreached, 1)
Rule_AddInterval(InitialAttack, 10)
Rule_AddOneShot(SpawnStealthyMarines, 5)
Rule_AddOneShot(SpawnDefilerBaseDefenseForce, 5)
Rule_AddOneShot(SpawnDreadnaughtBaseDefenseForce, 6)
Rule_AddOneShot(SpawnInitialDreadnoughts, 5)
Rule_AddOneShot(SpawnSorcererAttack, 5)
Rule_AddInterval(ChaosStorm, 5)
Rule_AddInterval(ChaosSpellLevel, 1)
Rule_AddInterval(Wander, 30)
Rule_AddInterval(AttackPlayerbaseFromMarker, 2)
Rule_AddInterval(StartSpawningSorcerers, 5)
Rule_AddInterval(FlyBloodThirsterToShrines, 1)
Rule_Add(ShrineDeath)
Rule_AddInterval(UpdateShrines, 1)
Rule_AddInterval(SlagDepositTrap, 1)
Rule_AddInterval(DreadnoughtPatrol, 20)
Rule_AddOneShot(SpawnRhinos, 10)
Rule_AddOneShot(LoadRhinos, 15)
Rule_AddInterval(RhinoAttack, 30)
Rule_AddInterval(DefilerBaseDefenseAttack, 1)
Rule_AddInterval(DreadnaughtBaseDefenseAttack, 1)
Rule_AddInterval(DefilerBaseDefenseAttGround, 8)
Rule_AddInterval(SpawnMainBaseDefenseForce, 2)
Rule_AddInterval(CheckForDefilerKill, 1)
Rule_AddInterval(CheckForDreadnaughtKill, 1)
Rule_AddInterval(Rule_Objective_DestroyStronghold, 3)
Rule_AddInterval(SorcererAttack, 1)
Rule_AddInterval(SpawnChaosLord, 1)
Rule_AddInterval(StartSecondaryObjectives, 2)
Rule_AddInterval(SpawnCityEntranceDefenseForce, 8)
Rule_AddInterval(EnterMainBaseEarlyIE, 1)
Rule_AddInterval(FinalFightIE, 10)
Rule_AddInterval(DaemonsFromShrineIE, 2)
Rule_AddInterval(ShrineIEs, 1)
Rule_AddInterval(Lose, 10)
Rule_AddInterval(CheckShrinesForSorcerer, 1)
Rule_AddInterval(IntelligentlyMoveAttacks, 5)
--end the game if you complete objectives
--Rule_AddInterval(CompleteScenario, 10)
--[[ Clean up -- Since we did Rule_Add(Rule_GameStart) it was attempting to run this function every frame, but now that it has finished running, we don't need it to run anymore.]]
Rule_Remove(Rule_GameStart)
end
end
function OrientateShrines() EPath_Start("shrine1", "shrine1_1", "shrine1_2", "eg_Shrine1") EPath_Start("shrine2", "shrine2_1", "shrine2_2", "eg_Shrine2") EPath_Start("shrine3", "shrine3_1", "shrine3_2", "eg_Shrine3") EPath_Start("shrine4", "shrine4_1", "shrine4_2", "eg_Shrine4") end
-- Create and Initially Show the Game Timer function Rule_UI_Game_Timer()
g_UI_gameTimer = 0
WinWarning_Add( "ui_gameTime", World_GetPlayerAt(0), "", "", "" )
Rule_AddInterval(Rule_UI_Game_Timer_Tick, 1)
end
-- Updates and shows the Game Timer every second function Rule_UI_Game_Timer_Tick()
g_UI_gameTimer = g_UI_gameTimer+1
WinWarning_SetText( "ui_gameTime", Loc_FormatText1( 60445, Loc_FormatTime( 60409, g_UI_gameTimer ) ) )
end
--[[Drops down buildings at markers, to create the SM bases around the map]] function Rule_CreateChaosBases()
--[[MainBase]]
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosHQ", "chaos_hq", "mkr_mainbase_hq", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosMainBaseBarracks", "chaos_temple", "mkr_mainbase_barracks", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosMainBaseMachinePit", "chaos_machine_pit", "mkr_mainbase_machinepit", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosMainBaseSC", "chaos_sacrificial_circle", "mkr_mainbase_sacrificialcircle", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosMainBaseDP", "chaos_greater_sacrificial_circle", "mkr_mainbase_daemonpit", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosMainBaseArmory", "chaos_armoury", "mkr_mainbase_armory", 1)
EGroup_ForceAddOn("eg_ChaosHQ", "chaos_hq_addon_2")
for i=1,6 do
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosMainBaseGenerator"..i, "chaos_plasma_generator", "mkr_mainbase_powergen"..i, 1)
end
for i=1,6 do
--Entity_CreateBuildingMarker(g_Player2, "eg_ChaosMainBaseTurret"..i, "chaos_turret_bolter", "mkr_mainbase_turret"..i, 1)
--EGroup_ForceAddOn("eg_ChaosMainBaseTurret"..i, "chaos_turret_addon")
end
--[[Side Base1]]
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBaseHQ", "chaos_hq", "mkr_sidebase_hq", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBaseBarracks", "chaos_temple", "mkr_sidebase_barracks", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBaseMachinePit1", "chaos_machine_pit", "mkr_sidebase_machinepit1", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBaseMachinePit2", "chaos_machine_pit", "mkr_sidebase_machinepit2", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBaseArmory", "chaos_armoury", "mkr_sidebase_armory", 1)
for i=1,6 do
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBaseTurret"..i, "chaos_turret_bolter", "mkr_sidebase_turret"..i, 1)
EGroup_ForceAddOn("eg_ChaosSideBaseTurret"..i, "chaos_turret_addon")
end
--[[Side Base2]]
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBase2Building1", "chaos_hq", "mkr_sidebase2_hq", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBase2Building2", "chaos_temple", "mkr_sidebase2_barracks", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBase2Building3", "chaos_machine_pit", "mkr_sidebase2_machinepit3", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBase2Building4", "chaos_machine_pit", "mkr_sidebase2_machinepit4", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBase2Building5", "chaos_machine_pit", "mkr_sidebase2_machinepit5", 1)
for i=6,11 do
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBase2Building"..i, "chaos_turret_bolter", "mkr_sidebase2_turret"..i-5, 1)
Chance = World_GetRand(1,10)
if Chance >= 5 then
EGroup_ForceAddOn("eg_ChaosSideBase2Building"..i, "chaos_turret_addon")
end
end
--[[Backbase]]
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBase2MachinePit1", "chaos_machine_pit", "mkr_backbase_machinepit", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosSideBase2Barracks", "chaos_temple", "mkr_backbase_barracks", 1)
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosMainBaseSC", "chaos_sacrificial_circle", "mkr_backbase_sacrificialcircle", 1)
--[[Random Turrets / Mines Around the Map]]
for i=1,18 do
Entity_CreateBuildingMarker(g_Player2, "eg_RandomTurret"..i, "chaos_turret_bolter", "mkr_random_turret"..i, 1)
EGroup_ForceAddOn("eg_RandomTurret"..i, "chaos_turret_addon")
end
-- spawn 12 stealth squads around the map
-- spawn 3 predators
-- give the AI all of the strategic points, and put upgraded listening posts on them
--[[Strategic Points]]
for i = 1,6 do
EGroup_SetPlayerOwner("eg_LP"..i, g_Player2)
Entity_CreateBuildingPosition(g_Player2, "eg_ListeningPosts"..i, "chaos_listening_post", EGroup_GetPosition("eg_LP"..i), 1)
EGroup_ForceAddOn("eg_ListeningPosts"..i, "chaos_list_post_addon_1")
EGroup_ForceAddOn("eg_ListeningPosts"..i, "chaos_list_post_addon_2")
end
--[[Relic]]
EGroup_SetPlayerOwner("eg_Relic", g_Player2)
Entity_CreateBuildingPosition(g_Player2, "eg_RelicPost", "chaos_listening_post", EGroup_GetPosition("eg_Relic"), 1)
EGroup_ForceAddOn("eg_RelicPost", "chaos_list_post_addon_1")
EGroup_ForceAddOn("eg_RelicPost", "chaos_list_post_addon_2")
--[[Chaos Storm Anchor]]
Entity_CreateBuildingMarker(g_Player2, "eg_ChaosStorm", "chaos_warp_storm_source", "mkr_chaos_storm_anchor", 1)
--[[ Mines ]]
for i=1,12 do
Entity_CreateBuildingMarker(g_Player2, "eg_Mine"..i, "chaos_mine_field", "mkr_mine"..i, 1)
end
--[[Detectors]]
for i=1,19 do
Entity_CreateBuildingMarker(g_Player2, "eg_Detector"..i, "chaos_detector", "mkr_detector"..i, 1)
end
end
function Rule_CreatePlayerBases()
local Race
local Player
Race = MetaMap_GetPlayerNRaceName(0)
Player = g_Player1
if Race == "chaos_marine_race" then
Entity_CreateBuildingMarker(Player, "eg_Player_HQ", "chaos_hq", "mkr_Player_HQ", 1)
Util_CreateSquadsAtMarkerEx(Player, "sg_Player_Builder", "chaos_squad_slave", "mkr_Player_Builder", 1, 1)
--win/loss
t_building_exceptions = {
"chaos_armoury",
"chaos_listening_post",
"chaos_mine_field",
"chaos_plasma_generator",
"chaos_thermo_plasma_generator",
"chaos_turret_bolter"
}
t_unit_exceptions = {}
elseif Race == "guard_race" then
Entity_CreateBuildingMarker(Player, "eg_Player_HQ", "guard_hq", "mkr_Player_HQ", 1)
Util_CreateSquadsAtMarkerEx(Player, "sg_Player_Builder", "guard_squad_enginseer", "mkr_Player_Builder", 1, 1)
--win/loss
t_building_exceptions = {
"guard_listening_post",
"guard_mines",
"guard_plasma_generator",
"guard_tactica",
"guard_thermo_plasma",
"guard_turret_heavy_bolter"
}
t_unit_exceptions = {}
elseif Race == "ork_race" then
Entity_CreateBuildingMarker(Player, "eg_Player_HQ", "ork_hq", "mkr_Player_HQ", 1)
Util_CreateSquadsAtMarkerEx(Player, "sg_Player_Builder", "ork_squad_grot", "mkr_Player_Builder", 1, 1)
--win/loss
t_building_exceptions = {
"ork_bigger_generator",
"ork_generator",
"ork_gork_totem",
"ork_mine_field",
"ork_pile_o_guns",
"ork_waagh_banner"
}
t_unit_exceptions = {}
elseif Race == "space_marine_race" then
Entity_CreateBuildingMarker(Player, "eg_Player_HQ", "space_marine_hq", "mkr_Player_HQ", 1)
Util_CreateSquadsAtMarkerEx(Player, "sg_Player_Builder", "space_marine_squad_servitor", "mkr_Player_Builder", 1, 1)
--win/loss
t_building_exceptions = {
"space_marine_armoury",
"space_marine_generator",
"space_marine_listening_post",
"space_marine_mine_field",
"space_marine_turret_bolter",
"space_marine_thermo_generator"
}
t_unit_exceptions = {}
elseif Race == "tau_race" then
Entity_CreateBuildingMarker(Player, "eg_Player_HQ", "tau_hq", "mkr_Player_HQ", 1)
Util_CreateSquadsAtMarkerEx(Player, "sg_Player_Builder", "tau_builder_squad", "mkr_Player_Builder", 1, 1)
--win/loss
t_building_exceptions = {
"tau_listening_post",
"tau_research_building",
"tau_shrine_of_kauyon",
"tau_shrine_of_montka",
"tau_shrine_of_purpose",
"tau_thermoplasma_generator",
"tau_turret_sp",
"tau_plasma_generator"
}
t_unit_exceptions = {}
elseif Race == "necron_race" then
Entity_CreateBuildingMarker(Player, "eg_Player_HQ", "monolith", "mkr_Player_HQ", 1)
Util_CreateSquadsAtMarkerEx(Player, "sg_Player_Builder", "necron_builder_scarab_squad", "mkr_Player_Builder", 1, 1)
--win/loss
t_building_exceptions = {
"necron_listening_post",
"necron_summoning_core",
"necron_plasma_generator",
"necron_energy_core",
"necron_greater_summoning_core",
"necron_forbidden_archive",
"necron_thermoplasma_generator",
"necron_turret"
}
t_unit_exceptions = {}
elseif Race == "eldar_race" then
Entity_CreateBuildingMarker(Player, "eg_Player_HQ", "eldar_hq", "mkr_Player_HQ", 1)
Util_CreateSquadsAtMarkerEx(Player, "sg_Player_Builder", "eldar_squad_bonesinger", "mkr_Player_Builder", 1, 1)
--win/loss
t_building_exceptions = {
"eldar_advanced_warp_generator",
"eldar_listening_post",
"eldar_mine_field",
"eldar_soul_shrine",
"eldar_support_platform_scatterlaser",
"eldar_warp_generator"
}
t_unit_exceptions = {}
elseif Race == "dark_eldar_race" then
Entity_CreateBuildingMarker(Player, "eg_Player_HQ", "dark_eldar_hq", "mkr_Player_HQ", 1)
Util_CreateSquadsAtMarkerEx(Player, "sg_Player_Builder", "dark_eldar_squad_slave", "mkr_Player_Builder", 1, 1)
--win/loss
t_building_exceptions = {
"dark_eldar_haemonculus_laboratory",
"dark_eldar_listening_post",
"dark_eldar_plasma_generator",
"dark_eldar_slave_caravel",
"dark_eldar_soul_cage",
"dark_eldar_thermo_plasma"
}
t_unit_exceptions = {}
elseif Race == "sisters_race" then
Entity_CreateBuildingMarker(Player, "eg_Player_HQ", "sisters_hq", "mkr_Player_HQ", 1)
Util_CreateSquadsAtMarkerEx(Player, "sg_Player_Builder", "sisters_squad_servitor", "mkr_Player_Builder", 1, 1)
--win/loss
t_building_exceptions = {
"sisters_thermo_plasma",
"sisters_plasma_generator",
"sisters_turret_flamer",
"sisters_holy_reliquary",
"sisters_listening_post",
"sisters_mines",
"sisters_sanctuary"
}
t_unit_exceptions = {}
end
t_blueprintbonus = {}
MetaMap_GetRaceStartingSquadsList(MetaMap_GetPlayerNRaceName(0), t_blueprintbonus)
for j = 1, table.getn(t_blueprintbonus) do
Util_CreateSquadsAtMarker(g_Player1, "sg_Bonus"..j, t_blueprintbonus[j], "mkr_Player_Builder", 1)
end
--[[TODO: Remove! DEBUG USE ONLY!]] if g_Debug == true then EGroup_SetHealthInvulnerable("eg_Player_HQ", true) end
ForwardBases()
end
function ForwardBases()
--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 algorithm 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() == "sisters_race" then
g_bonus_generator = "sisters_plasma_generator"
g_bonus_turret = "sisters_turret_flamer"
g_bonus_barracks = "sisters_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 = "sisters_sanctuary"
elseif MetaMap_GetPlayerRaceName() == "dark_eldar_race" then
g_bonus_generator = "dark_eldar_plasma_generator"
g_bonus_turret = "dark_eldar_slave_caravel"
g_bonus_barracks = "dark_eldar_hall_of_blood"
g_bonus_barracks2 = "dark_eldar_skimmer_shop"
g_bonus_research = "dark_eldar_haemonculus_laboratory"
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 = {}
-- Always builds the building (prevents crashes and speeds things up)
function user_CreateBuilding(p_PlayerID, p_EGroupID, p_MarkerName, p_Blueprint)
l_EntityID = Entity_Create(p_Blueprint, p_PlayerID, Marker_GetPosition(Marker_FromName(p_MarkerName, "basic_marker" )))
EGroup_Add(EGroup_CreateIfNotFound(p_EGroupID), l_EntityID)
Entity_Spawn(l_EntityID)
end
MetaMap_GetAttackingRaceStartingEntitiesList(t_blueprintEntitybonus)
for j=1,table.getn(t_blueprintEntitybonus) do
if t_blueprintEntitybonus[j] == g_bonus_generator then
user_CreateBuilding(g_Player1, "eg_Bonus"..j,"MM_Reinforcement"..g_bonus_gen_counter, t_blueprintEntitybonus[j])
--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
user_CreateBuilding(g_Player1, "eg_Bonus"..j,"MM_Reinforcement"..g_bonus_turret_counter, t_blueprintEntitybonus[j])
--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.
user_CreateBuilding(g_Player1, "eg_Bonus"..j,"MM_Reinforcement10", t_blueprintEntitybonus[j])
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
user_CreateBuilding(g_Player1, "eg_Bonus"..j,"MM_Reinforcement11", t_blueprintEntitybonus[j])
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
user_CreateBuilding(g_Player1, "eg_Bonus"..j,"MM_Reinforcement13", t_blueprintEntitybonus[j])
end
end
end
function DifficultyLevel() local StrongholdStrength = MetaMap_GetTerritoryMilitaryStrength(MetaMap_GetDefendingTerritoryIndex())
if StrongholdStrength == 10 or StrongholdStrength == 11 or StrongholdStrength == 12 then
g_Difficulty = 1
elseif StrongholdStrength == 13 or StrongholdStrength == 14 or StrongholdStrength == 15 then
g_Difficulty = 2
elseif StrongholdStrength == 16 or StrongholdStrength == 17 then
g_Difficulty = 3
end
end
function PopCheck(Counter, SGroup, MaxPop)
local Pop = 0
for i=0,Counter do
if SGroup_Exists(SGroup..i) and SGroup_Count(SGroup..i) > 0 then
Pop = Pop + SGroup_Count(SGroup..i)
end
end
if Pop < math.floor(MaxPop) then
return true
else
return false
end
end
function ChaosStorm()
--constantly recast the chaos storm ability, this skill is removed when all shrines are killed by calling the removal of this function
Command_EntityAbilityPos(g_Player2,EGroup_GetSpawnedEntityAt(EGroup_FromName("eg_ChaosStorm"), 1), g_ChaosStormLevel,
Marker_GetPosition(Marker_FromName("mkr_mainbase_area", "basic_marker")))
Command_EntityAbilityPos(g_Player2,EGroup_GetSpawnedEntityAt(EGroup_FromName("eg_ChaosStorm"), 1), g_ChaosStormDamageLevel,
Marker_GetPosition(Marker_FromName("mkr_mainbase_area", "basic_marker")))
--World_FXEvent("data:Art/Events/dxp3_sp/chaos_storm_temp", Marker_GetPosition(Marker_FromName("mkr_mainbase_area", "basic_marker")))
end
function ChaosSpellLevel() local Count = 0 for i=1,5 do if EGroup_Exists("eg_Shrine"..i) and EGroup_Count("eg_Shrine"..i) > 0 then Count = Count + 1 end end
if Count == 5 then
g_ChaosStormLevel = "chaos_warp_storm_1"
g_ChaosStormDamageLevel = "chaos_warp_storm_damage_1"
elseif Count == 4 then
g_ChaosStormLevel = "chaos_warp_storm_2"
g_ChaosStormDamageLevel = "chaos_warp_storm_damage_2"
elseif Count == 3 then
g_ChaosStormLevel = "chaos_warp_storm_3"
g_ChaosStormDamageLevel = "chaos_warp_storm_damage_3"
elseif Count == 2 then
g_ChaosStormLevel = "chaos_warp_storm_4"
g_ChaosStormDamageLevel = "chaos_warp_storm_damage_4"
elseif Count == 1 then
g_ChaosStormLevel = "chaos_warp_storm_5"
g_ChaosStormDamageLevel = "chaos_warp_storm_damage_5"
elseif Count == 0 then
Rule_Remove(ChaosStorm)
Rule_Remove(ChaosSpellLevel)
end
end
function UpdateShrines()
if g_TotalShrines > 0 then
-- loop through all possible shrines
for i=1,5 do
-- if a shrine doesnt exist
if EGroup_Exists("eg_Shrine"..i) and EGroup_Count("eg_Shrine"..i) == 0 then
--loop through the table of existing shrines, and see if it is there
for j=1,g_TotalShrines do
-- if it does exist in the array
if t_Shrines[j] == i then
--take a point from the end of the list and move it into its slot and decrement the global shrines
--print("before -- ")
PrintArray()
t_Shrines[j] = t_Shrines[g_TotalShrines]
g_TotalShrines = g_TotalShrines - 1
--print("after -- ")
PrintArray()
--print("total shrines -- "..g_TotalShrines)
end
end
end
end
else
Rule_Remove(UpdateShrines)
end
end
function PrintArray() --[[ if g_TotalShrines >= 1 then print("{") for j=1,g_TotalShrines do print(t_Shrines[j] .. ", ") end print("}") end ]] end
function ShrineTier() if g_ShrineTier < 5 then g_ShrineTier = g_ShrineTier + 1 end end
function SpawnDaemonsAtShrines()
if g_TotalShrines >= 1 then
local SpawnPoint = t_Shrines[ World_GetRand(1, g_TotalShrines ) ]
local Chance = 1
if g_ShrineTier == 1 then
Chance = World_GetRand(1,4)
elseif g_ShrineTier == 2 then
Chance = World_GetRand(1,6)
elseif g_ShrineTier == 3 then
Chance = World_GetRand(1,8)
elseif g_ShrineTier == 4 then
Chance = World_GetRand(1,10)
elseif g_ShrineTier == 5 then
Chance = World_GetRand(1,11)
end
if Chance >= 1 and Chance <= 4 then
-- cultist
SGroup = "sg_Cultist"
Counter = g_CultistCounter
Blueprint = "chaos_squad_cultist"
SquadNum = World_GetRand(8, 10)
MaxPop = g_MaxCultist
elseif Chance == 5 or Chance == 6 then
-- khorne beserkers
SGroup = "sg_Zerker"
Counter = g_ZerkerCounter
Blueprint = "chaos_squad_khorne_berserker"
SquadNum = World_GetRand(7, 8)
MaxPop = g_MaxZerker
elseif Chance == 7 or Chance == 8 then
-- horrors
SGroup = "sg_Horror"
Counter = g_HorrorCounter
Blueprint = "chaos_squad_horror"
SquadNum = 5
MaxPop = g_MaxHorror
elseif Chance == 9 or Chance == 10 then
-- possessed squad
SGroup = "sg_Posd"
Counter = g_PosdCounter
Blueprint = "chaos_squad_possessed_marine"
SquadNum = 8
MaxPop = g_MaxPosd
elseif Chance == 11 then
-- obliterator
SGroup = "sg_Obliterator"
Counter = g_ObliteratorCounter
Blueprint = "chaos_squad_obliterator"
SquadNum = World_GetRand(4, 5)
MaxPop = g_MaxObliterator
end
if PopCheck(Counter, SGroup, MaxPop) == true and EGroup_Exists("eg_Shrine"..SpawnPoint) and EGroup_Count("eg_Shrine"..SpawnPoint) > 0 then
Util_CreateSquadsAtMarkerEx(g_Player2, SGroup..Counter, Blueprint, "mkr_shrine"..SpawnPoint, 1, SquadNum)
if SpawnPoint == 1 then
Cmd_AttackMoveMarker(SGroup..Counter, "mkr_wander9")
elseif SpawnPoint == 2 then
Cmd_AttackMoveMarker(SGroup..Counter, "mkr_wander8")
elseif SpawnPoint == 3 then
Cmd_AttackMoveMarker(SGroup..Counter, "mkr_wander1")
elseif SpawnPoint == 4 then
Cmd_AttackMoveMarker(SGroup..Counter, "mkr_wander4")
elseif SpawnPoint == 5 then
Cmd_AttackMoveMarker(SGroup..Counter, "mkr_wander1")
end
end
if Blueprint == "chaos_squad_cultist" then
g_CultistCounter = g_CultistCounter + 1
elseif Blueprint == "chaos_squad_khorne_berserker" then
g_ZerkerCounter = g_ZerkerCounter + 1
elseif Blueprint == "chaos_squad_horror" then
g_HorrorCounter = g_HorrorCounter + 1
elseif Blueprint == "chaos_squad_possessed_marine" then
g_PosdCounter = g_PosdCounter + 1
elseif Blueprint == "chaos_squad_obliterator" then
g_ObliteratorCounter = g_ObliteratorCounter + 1
elseif Blueprint == "chaos_squad_daemon_prince" then
g_PrinceCounter = g_PrinceCounter + 1
end
end
end
function Wander() g_WanderCounter = g_WanderCounter + 1 -- player 2 for i=1,8 do if Player_AreSquadsNearMarker(g_Player2, "mkr_wander"..i) then Player_GetAllSquadsNearMarker(g_Player2, "sg_WanderSquad"..i.."Counter"..g_WanderCounter, "mkr_wander"..i) if g_TotalShrines > 0 then Cmd_AttackMoveMarker("sg_WanderSquad"..i.."Counter"..g_WanderCounter, "mkr_wander"..i+1) else Cmd_AttackMoveMarker("sg_WanderSquad"..i.."Counter"..g_WanderCounter, "mkr_mainbase_area") end end end
-- player 2
if Player_AreSquadsNearMarker(g_Player2, "mkr_wander9") then
Player_GetAllSquadsNearMarker(g_Player2, "WanderAttackSquad"..g_WanderCounter, "mkr_wander9")
g_WanderUnitAttackCount = g_WanderUnitAttackCount + SGroup_Count("WanderAttackSquad"..g_WanderCounter)
if g_WanderUnitAttackCount >= g_WanderUnitAttackInterval then
g_WanderUnitAttackCount = 0
local Chance = World_GetRand(1,10)
if Chance < 5 then
Cmd_AttackMoveMarker("WanderAttackSquad"..g_WanderCounter, "mkr_playerbase_attack1")
elseif Chance >= 5 then
Cmd_AttackMoveMarker("WanderAttackSquad"..g_WanderCounter, "mkr_playerbase_attack2")
end
else
Cmd_AttackMoveMarker("WanderAttackSquad"..g_WanderCounter, "mkr_wander1")
end
end
-- player 5
for i=1,3 do
if Player_AreSquadsNearMarker(g_Player5, "mkr_attmovemarker"..i) then
Player_GetAllSquadsNearMarker(g_Player5, "sg_P5WanderSquad"..i.."Counter"..g_WanderCounter, "mkr_attmovemarker"..i)
Cmd_AttackMoveMarker("sg_P5WanderSquad"..i.."Counter"..g_WanderCounter, "mkr_attmovemarker"..i+1)
end
end
-- player 5
if Player_AreSquadsNearMarker(g_Player5, "mkr_attmovemarker4") then
Player_GetAllSquadsNearMarker(g_Player5, "P5WanderAttackSquad"..g_WanderCounter, "mkr_attmovemarker4")
SGroup_SetPlayerOwner("P5WanderAttackSquad"..g_WanderCounter, g_Player2)
local Chance = World_GetRand(1,10)
if Chance == 1 or Chance == 2 then
Cmd_AttackMoveMarker("P5WanderAttackSquad"..g_WanderCounter, "mkr_playerbase_attack1")
elseif Chance == 3 or Chance == 4 then
Cmd_AttackMoveMarker("P5WanderAttackSquad"..g_WanderCounter, "mkr_playerbase_attack2")
elseif Chance >= 5 and Chance <= 10 then
Cmd_AttackMoveMarker("P5WanderAttackSquad"..g_WanderCounter, "mkr_wander1")
end
end
end
function AttackPlayerbaseFromMarker() for i=1,2 do if Player_AreSquadsNearMarker(g_Player2, "mkr_playerbase_attack"..i) then g_PBACounter = g_PBACounter + 1 Player_GetAllSquadsNearMarker(g_Player2, "sg_PlayerbaseAttack"..g_PBACounter, "mkr_playerbase_attack"..i) --Cmd_AttackMoveMarker("sg_PlayerbaseAttack"..g_PBACounter, "mkr_Player_HQ") Cmd_AttackMovePos("sg_PlayerbaseAttack"..g_PBACounter, g_GlobalAttackPos) end end end
function StartSpawningSorcerers() if g_TotalShrines == 4 then Player_GrantResearch(g_Player2, "chaos_bloodthirster_research") Player_GrantResearch(g_Player3, "chaos_bloodthirster_research") Player_GrantResearch(g_Player4, "chaos_bloodthirster_research") Player_GrantResearch(g_Player5, "chaos_bloodthirster_research") Player_GrantResearch(g_Player6, "chaos_bloodthirster_research") Player_GrantResearch(g_Player7, "chaos_bloodthirster_research") Player_GrantResearch(g_Player8, "chaos_bloodthirster_research") Rule_Remove(StartSpawningSorcerers) Rule_AddInterval(SpawnSorcerer, g_SpawnBloodthirsterFodderMaxTimer) end end
function SpawnSorcerer() if EGroup_Exists("eg_ChaosHQ") and EGroup_Count("eg_ChaosHQ") > 0 and PopCheck(g_BloodThirsterCounter, "sg_BloodThirster", g_MaxBloodThirster) and g_TotalShrines > 0 then g_BloodThirsterCounter = g_BloodThirsterCounter + 1 Util_CreateSquadsAtMarkerEx(g_Player3, "sg_BloodThirster"..g_BloodThirsterCounter, "chaos_squad_aspiring_champion_sp_dxp3", "mkr_mainbase_hq", 1, 1) Cmd_MoveToMarker("sg_BloodThirster"..g_BloodThirsterCounter, "mkr_shrine"..t_Shrines[ World_GetRand(1, g_TotalShrines ) ]) end end
function CheckShrinesForSorcerer() -- if the sorcerer makes it to its shrine, spawn the bloodthirster if SGroup_Exists("sg_BloodThirster"..g_BloodThirsterCounter) and SGroup_Count("sg_BloodThirster"..g_BloodThirsterCounter) > 0 then for i=1,5 do if Prox_AnySquadNearMarker("sg_BloodThirster"..g_BloodThirsterCounter, "mkr_shrine"..i) then Cmd_Possesion("sg_BloodThirster"..g_BloodThirsterCounter) end end end end
function FlyBloodThirsterToShrines() if SGroup_Exists("sg_BloodThirster"..g_BloodThirsterCounter) and SGroup_Count("sg_BloodThirster"..g_BloodThirsterCounter) > 0 then for i=1,4 do if EGroup_Exists("eg_Shrine"..i) and EGroup_Count("eg_Shrine"..i) > 0 and Player_AreSquadsNearMarker(g_Player1, "mkr_shrinearea"..i) and g_JumpFlag == true then g_JumpFlag = false Cmd_JumpToMarker("sg_BloodThirster"..g_BloodThirsterCounter, "mkr_shrinearea"..i) Rule_Remove(FlyBloodThirsterToShrines) Rule_AddInterval(BloodThirsterCantFly,g_BloodThirsterFlyCoolDown) elseif Player_AreSquadsNearMarker(g_Player1, "mkr_attmovemarker"..i) == true and g_JumpFlag == true then g_JumpFlag = false Cmd_JumpToMarker("sg_BloodThirster"..g_BloodThirsterCounter, "mkr_attmovemarker"..i) Rule_Remove(FlyBloodThirsterToShrines) Rule_AddInterval(BloodThirsterCantFly, g_BloodThirsterFlyCoolDown) end end end end
function BloodThirsterCantFly() g_JumpFlag = true Rule_Remove(BloodThirsterCantFly) Rule_AddInterval(FlyBloodThirsterToShrines, 1) end
function ShrineDeath() for i=1,5 do if EGroup_Exists("eg_Shrine"..i) and EGroup_GetAvgHealth("eg_Shrine"..i) == 0 and t_ShrineBoom[i] == false then World_FXEvent("data:Art/Events/dxp3_sp/mark_of_khorne", Marker_GetPosition(Marker_FromName("mkr_shrine"..i, "basic_marker"))) t_ShrineBoom[i] = true SpawnDaemonsFromDeadShrine(i) if Objective_Exists(Objective_DestroyShrines.title_id) == true then Objective_PingRemove(Objective_DestroyShrines.title_id, g_ping_obj_shrine[i]) end end end end
function SpawnDaemonsFromDeadShrine(SpawnPoint)
local LoopNum = 0
if SpawnPoint == 5 then
LoopNum = 2
else
LoopNum = 3
end
SGroup_Create("ShrineSpawn"..SpawnPoint)
for i=1,LoopNum do
local Chance = World_GetRand(1,7)
if Chance == 1 or Chance == 2 then
-- khorne beserkers
SGroup = "sg_ZerkerShrine"
Counter = g_ZerkerCounter
Blueprint = "chaos_squad_khorne_berserker"
SquadNum = World_GetRand(7, 8)
elseif Chance == 3 or Chance == 4 then
-- horrors
SGroup = "sg_HorrorShrine"
Counter = g_HorrorCounter
Blueprint = "chaos_squad_horror"
SquadNum = 5
elseif Chance == 5 or Chance == 6 then
-- possessed squad
SGroup = "sg_PosdShrine"
Counter = g_PosdCounter
Blueprint = "chaos_squad_possessed_marine"
SquadNum = 8
elseif Chance == 7 then
-- obliterator
SGroup = "sg_ObliteratorShrine"
Counter = g_ObliteratorCounter
Blueprint = "chaos_squad_obliterator"
SquadNum = World_GetRand(4, 5)
end
--if PopCheck(Counter, SGroup, MaxPop) == true then
Util_CreateSquadsAtMarkerEx(g_Player2, SGroup..Counter, Blueprint, "mkr_shrine"..SpawnPoint, 1, SquadNum)
Util_CreateSquadsAtMarkerEx(g_Player8, "SeeingEyeCultists", "chaos_squad_cultist", "mkr_shrine"..SpawnPoint, 1, World_GetRand(5,8))
SGroup_AddGroup("ShrineSpawn"..SpawnPoint, SGroup..Counter)
--end
if Blueprint == "chaos_squad_cultist" then
g_CultistCounter = g_CultistCounter + 1
elseif Blueprint == "chaos_squad_khorne_berserker" then
g_ZerkerCounter = g_ZerkerCounter + 1
elseif Blueprint == "chaos_squad_horror" then
g_HorrorCounter = g_HorrorCounter + 1
elseif Blueprint == "chaos_squad_possessed_marine" then
g_PosdCounter = g_PosdCounter + 1
elseif Blueprint == "chaos_squad_obliterator" then
g_ObliteratorCounter = g_ObliteratorCounter + 1
elseif Blueprint == "chaos_squad_daemon_prince" then
g_PrinceCounter = g_PrinceCounter + 1
end
end
if SpawnPoint == 1 then
Cmd_AttackMoveMarker("ShrineSpawn"..SpawnPoint, "mkr_wander9")
elseif SpawnPoint == 2 then
Cmd_AttackMoveMarker("ShrineSpawn"..SpawnPoint, "mkr_wander8")
elseif SpawnPoint == 3 then
Cmd_AttackMoveMarker("ShrineSpawn"..SpawnPoint, "mkr_wander1")
elseif SpawnPoint == 4 then
Cmd_AttackMoveMarker("ShrineSpawn"..SpawnPoint, "mkr_wander4")
elseif SpawnPoint == 5 then
Cmd_AttackMoveMarker("ShrineSpawn"..SpawnPoint, "mkr_wander1")
end
end
function SpawnStealthyMarines()
Player_GrantResearch(g_Player4, "chaos_cultist_sight_research")
Player_GrantResearch(g_Player4, "chaos_infiltration_research")
Player_GrantResearch(g_Player4, "chaos_infiltration_marine_research")
Player_GrantResearch(g_Player4, "chaos_accuracy_upgrade_research")
Player_GrantResearch(g_Player4, "chaos_accuracy_upgrade_research_2")
Player_GrantResearch(g_Player4, "chaos_commander_health_research_1")
Player_GrantResearch(g_Player4, "chaos_commander_health_research_2")
Player_GrantResearch(g_Player4, "chaos_health_upgrade_research")
Player_GrantResearch(g_Player4, "chaos_health_upgrade_research_2")
Player_GrantResearch(g_Player4, "chaos_power_research_1")
Player_GrantResearch(g_Player4, "chaos_power_research_2")
Player_GrantResearch(g_Player4, "chaos_ranged_skill_research")
Player_GrantResearch(g_Player4, "chaos_champion_melee_research_1")
Player_GrantResearch(g_Player4, "chaos_champion_melee_research_2")
Player_GrantResearch(g_Player8, "chaos_cultist_sight_research")
for i=1,12 do
local RandomChance = World_GetRand(1,10)
local StealthSquads = 1
if RandomChance > 8 then
StealthSquads = 2
else
StealthSquads = 1
end
Util_CreateSquadsAtMarkerEx(g_Player4, "sg_StealthMarines"..i, "chaos_marine_squad", "mkr_stealth"..i, StealthSquads, 10)
SGroup_AddLeaders("sg_StealthMarines"..i)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_StealthMarines"..i), 1),"chaos_heavy_bolter_tactical", 4)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_StealthMarines"..i), 1),"chaos_plasma_gun_tactical", 3)
--Cmd_SetStance("sg_StealthMarines"..i, STANCE_StandGround)
Cmd_SetMeleeStance("sg_StealthMarines"..i, MSTANCE_Ranged)
end
end
function SlagDepositTrap()
if Player_AreSquadsNearMarker(g_Player1, "mkr_specialattackboundary") and EGroup_Exists("eg_ChaosHQ") and EGroup_Count("eg_ChaosHQ") > 0 then
Rule_AddOneShot(TrapIE, 1)
for i=1,2 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_SpecialAttackHorror"..i, "chaos_squad_horror", "mkr_mainbase_hq", 1, 5)
SGroup_DeSpawn("sg_SpecialAttackHorror"..i)
Squad_DeepStrikeToPos(SGroup_FromName("sg_SpecialAttackHorror"..i), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName("mkr_random_horror"..i, "basic_marker")))
end
for i=1,2 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_SpecialAttackObliterator"..i, "chaos_squad_obliterator", "mkr_mainbase_hq", 1, 5)
SGroup_DeSpawn("sg_SpecialAttackObliterator"..i)
Squad_DeepStrikeToPos(SGroup_FromName("sg_SpecialAttackObliterator"..i), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName("mkr_random_obliterator"..i, "basic_marker")))
end
Util_CreateSquadsAtMarkerEx(g_Player8, "SeeingEyeCultists", "chaos_squad_cultist", "mkr_mainbase_hq", 1, World_GetRand(5,8))
Cmd_AttackMoveMarker("SeeingEyeCultists", "mkr_random_obliterator1")
Rule_Remove(SlagDepositTrap)
Rule_AddInterval(MoveTrapDudes, 120)
end
end
function MoveTrapDudes() if Player_AreSquadsNearMarker(g_Player1, "mkr_specialattackdrop") == false and Player_AreSquadsNearMarker(g_Player2, "mkr_specialattackdrop") == true then Player_GetAllSquadsNearMarker(g_Player2, "sg_SpecialAttackDudes", "mkr_specialattackdrop") Cmd_AttackMoveMarker("sg_SpecialAttackDudes","mkr_wander2") elseif Player_AreSquadsNearMarker(g_Player1, "mkr_specialattackdrop") == true and Player_AreSquadsNearMarker(g_Player2, "mkr_specialattackdrop") == false then -- send an attack squad to the area from the main base if EGroup_Exists("eg_ChaosMainBaseBarracks") and EGroup_Count("eg_ChaosMainBaseBarracks") > 0 then Util_CreateSquadsAtMarkerEx(g_Player5, "sg_SlagAttack", "chaos_marine_squad", "mkr_mainbase_barracks", 2, 10) SGroup_AddLeaders("sg_SlagAttack") Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_SlagAttack"), 1),"chaos_plasma_gun_tactical", 5) Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_SlagAttack"), 1),"chaos_heavy_bolter_tactical", 5) end if EGroup_Exists("eg_ChaosMainBaseMachinePit") and EGroup_Count("eg_ChaosMainBaseMachinePit") > 0 then Util_CreateSquadsAtMarkerEx(g_Player5, "sg_SlagAttackTanks", "chaos_squad_predator", "mkr_mainbase_machinepit", 1, 1) Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_SlagAttackTanks"), 1),"chaos_autocannon_predator_improved", 2) Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_SlagAttackTanks"), 1),"haos_heavy_bolter_predator_r_improved", 2) Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_SlagAttackTanks"), 1),"chaos_heavy_bolter_predator_l_improved", 2) end Cmd_AttackMoveMarker("sg_SlagAttack","mkr_specialattackdrop") Cmd_AttackMoveMarker("sg_SlagAttackTanks","mkr_specialattackdrop") Rule_Remove(MoveTrapDudes) end end
function SpawnDefilers() local Chance = World_GetRand(1,2) -- if the side base is alive spawn defilers if EGroup_Exists("eg_ChaosSideBaseHQ") and EGroup_Count("eg_ChaosSideBaseHQ") > 0 and EGroup_Exists("eg_ChaosSideBaseMachinePit"..Chance) and EGroup_Count("eg_ChaosSideBaseMachinePit"..Chance) > 0 and PopCheck(g_DefilerCounter, "sg_Defiler", g_MaxDefilers) == true and g_SecondaryObjectiveFlag == true then g_DefilerCounter = g_DefilerCounter + 1 Util_CreateSquadsAtMarkerEx(g_Player5, "sg_Defiler"..g_DefilerCounter, "chaos_squad_defiler", "mkr_sidebase_machinepit"..Chance, 1, 1) Cmd_AttackMoveMarker("sg_Defiler"..g_DefilerCounter, "mkr_attmovemarker1") end end
function SpawnDreadnoughts() local Chance = World_GetRand(3,5) if EGroup_Exists("eg_ChaosSideBase2Building1") and EGroup_Count("eg_ChaosSideBase2Building1") > 0 and EGroup_Exists("eg_ChaosSideBase2Building"..Chance) and EGroup_Count("eg_ChaosSideBase2Building"..Chance) > 0 and PopCheck(g_DreadnoughtCounter, "sg_Dreadnoughts", g_MaxDreadnoughts) == true and g_SecondaryObjectiveFlag == true then
g_DreadnoughtCounter = g_DreadnoughtCounter + 1
if g_TotalShrines > 0 then
local pos = 0
local Duty = World_GetRand(1,2)
if Duty == 1 then
for i=1,5 do
if Player_AreSquadsNearMarker(g_Player1, "mkr_shrinearea"..i) then
pos = i
end
end
if pos > 0 then
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_Dreadnoughts"..g_DreadnoughtCounter, "chaos_squad_hell_talon", "mkr_sidebase2_machinepit"..Chance, 1, 1)
Cmd_AttackMoveMarker("sg_Dreadnoughts"..g_DreadnoughtCounter, "mkr_shrinearea"..pos)
else
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Dreadnoughts"..g_DreadnoughtCounter, "chaos_squad_hell_talon", "mkr_sidebase2_machinepit"..Chance, 1, 1)
Cmd_AttackMoveMarker("sg_Dreadnoughts"..g_DreadnoughtCounter, "mkr_wander1")
end
elseif Duty == 2 then
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_Dreadnoughts"..g_DreadnoughtCounter, "chaos_squad_hell_talon", "mkr_sidebase2_machinepit"..Chance, 1, 1)
Cmd_AttackMoveMarker("sg_Dreadnoughts"..g_DreadnoughtCounter, "mkr_wander1")
end
else
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_Dreadnoughts"..g_DreadnoughtCounter, "chaos_squad_hell_talon", "mkr_sidebase2_machinepit"..Chance, 1, 1)
Cmd_AttackMoveMarker("sg_Dreadnoughts"..g_DreadnoughtCounter, "mkr_mainbase_area")
end
end
end
function DreadnoughtPatrol()
g_DNWanderCounter = g_DNWanderCounter + 1
for i=1,2 do
if Player_AreSquadsNearMarker(g_Player6, "mkr_dreadnoughtpatrol"..i) then
Player_GetAllSquadsNearMarker(g_Player6, "sg_DNWanderSquad"..i.."Counter"..g_DNWanderCounter, "mkr_dreadnoughtpatrol"..i)
if g_TotalShrines > 0 then
if i == 1 then
Cmd_AttackMoveMarker("sg_DNWanderSquad"..i.."Counter"..g_DNWanderCounter, "mkr_dreadnoughtpatrol2")
else
Cmd_AttackMoveMarker("sg_DNWanderSquad"..i.."Counter"..g_DNWanderCounter, "mkr_dreadnoughtpatrol1")
end
else
Cmd_AttackMoveMarker("sg_DNWanderSquad"..i.."Counter"..g_DNWanderCounter, "mkr_mainbase_area")
end
end
end
end
function SpawnInitialDreadnoughts() -- eh, lets spawn a couple predators on the map too :) for i=1,3 do Util_CreateSquadsAtMarkerEx(g_Player6, "sg_RandomPredators"..i, "chaos_squad_predator", "mkr_random_predator"..i, 1, 1) Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_RandomPredators"..i), 1),"chaos_autocannon_predator_improved", 1) Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_RandomPredators"..i), 1),"chaos_heavy_bolter_predator_r_improved", 1) Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_RandomPredators"..i), 1),"chaos_heavy_bolter_predator_l_improved", 1) SGroup_FaceMarker("sg_RandomPredators"..i, "mkr_faceme"..i) end end
function MainBaseAttackTier() if g_BaseAttackTier < 6 then g_BaseAttackTier = g_BaseAttackTier + 1 end end
function MainBaseAttack()
local AmountSpawned = 1
if g_Difficulty == 1 then
if g_BaseAttackTier == 1 then
AmountSpawned = 1
elseif g_BaseAttackTier == 2 then
AmountSpawned = 2
elseif g_BaseAttackTier == 3 then
AmountSpawned = 3
elseif g_BaseAttackTier == 4 then
AmountSpawned = 3
elseif g_BaseAttackTier == 5 then
AmountSpawned = 4
elseif g_BaseAttackTier == 6 then
AmountSpawned = 4
end
elseif g_Difficulty == 2 then
if g_BaseAttackTier == 1 then
AmountSpawned = 1
elseif g_BaseAttackTier == 2 then
AmountSpawned = 2
elseif g_BaseAttackTier == 3 then
AmountSpawned = 3
elseif g_BaseAttackTier == 4 then
AmountSpawned = 3
elseif g_BaseAttackTier == 5 then
AmountSpawned = 4
elseif g_BaseAttackTier == 6 then
AmountSpawned = 5
end
elseif g_Difficulty == 3 then
if g_BaseAttackTier == 1 then
AmountSpawned = 1
elseif g_BaseAttackTier == 2 then
AmountSpawned = 2
elseif g_BaseAttackTier == 3 then
AmountSpawned = 3
elseif g_BaseAttackTier == 4 then
AmountSpawned = 4
elseif g_BaseAttackTier == 5 then
AmountSpawned = 5
elseif g_BaseAttackTier == 6 then
AmountSpawned = 5
end
end
for i=1, AmountSpawned do
local Chance = 0
if i== 1 then
Chance = World_GetRand(1,6)
elseif i==2 then
Chance = World_GetRand(1,6)
elseif i==3 then
Chance = World_GetRand(1,7)
elseif i==4 then
Chance = World_GetRand(1,8)
elseif i==5 then
Chance = 7
elseif i==6 then
Chance = World_GetRand(1,8)
end
if Chance == 1 or Chance == 2 then
-- cultist
SGroup = "sg_Cultist"
Counter = g_CultistCounter
Blueprint = "chaos_squad_cultist"
SquadNum = World_GetRand(8, 10)
MaxPop = g_MaxCultist
Building = "eg_ChaosHQ"
SpawnMarker = "mkr_mainbase_hq"
elseif Chance == 3 or Chance == 4 then
-- raptor
SGroup = "sg_Raptor"
Counter =g_RaptorCounter
Blueprint = "chaos_squad_raptor"
SquadNum = World_GetRand(8,10)
MaxPop = g_MaxRaptor
Building = "eg_ChaosMainBaseBarracks"
SpawnMarker = "mkr_mainbase_barracks"
elseif Chance == 5 or Chance == 6 then
-- space marine
SGroup = "sg_SpaceMarine"
Counter = g_SpaceMarineCounter
Blueprint = "chaos_marine_squad"
SquadNum = World_GetRand(8, 10)
MaxPop = g_MaxSpaceMarine
Building = "eg_ChaosMainBaseBarracks"
SpawnMarker = "mkr_mainbase_barracks"
elseif Chance == 7 or Chance == 8 then
-- predator
SGroup = "sg_Predator"
Counter = g_PredatorCounter
Blueprint = "chaos_squad_predator"
SquadNum = 1
MaxPop = g_MaxPredator
Building = "eg_ChaosMainBaseMachinePit"
SpawnMarker = "mkr_mainbase_machinepit"
end
if PopCheck(Counter, SGroup, MaxPop) == true and EGroup_Exists(Building) and EGroup_Count(Building) > 0 then
Util_CreateSquadsAtMarkerEx(g_Player2, SGroup..Counter, Blueprint, SpawnMarker, 1, SquadNum)
if SGroup_Exists(SGroup..Counter) and SGroup_CountSpawned(SGroup..Counter) > 0 then
if g_BaseAttackTier > 3 then
if Blueprint == "chaos_squad_cultist" then
local Chance = World_GetRand(1,10)
if Chance >= 2 then
SGroup_AddLeaders(SGroup..Counter)
end
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName(SGroup..Counter), 1),"chaos_plasma_gun_cultist", World_GetRand(2,3))
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName(SGroup..Counter), 1),"chaos_grenade_launcher", World_GetRand(2,3))
elseif Blueprint == "chaos_squad_raptor" then
local Chance = World_GetRand(1,10)
if Chance >= 3 then
SGroup_AddLeaders(SGroup..Counter)
end
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName(SGroup..Counter), 1),"chaos_flamer_raptor", World_GetRand(2,3))
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName(SGroup..Counter), 1),"chaos_chainsword_raptor", World_GetRand(2,3))
elseif Blueprint == "chaos_marine_squad" then
local Chance = World_GetRand(1,10)
if Chance >= 3 then
SGroup_AddLeaders(SGroup..Counter)
end
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName(SGroup..Counter), 1),"chaos_heavy_bolter_tactical", World_GetRand(2,3))
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName(SGroup..Counter), 1),"chaos_plasma_gun_tactical", World_GetRand(2,3))
end
end
if g_BaseAttackTier > 6 then
if Blueprint == "chaos_squad_predator" then
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName(SGroup..Counter), 1),"chaos_autocannon_predator_improved", 1)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName(SGroup..Counter), 1),"chaos_heavy_bolter_predator_r_improved", 1)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName(SGroup..Counter), 1),"chaos_heavy_bolter_predator_l_improved", 1)
end
end
RandomPoint = World_GetRand(1,2)
-- sorcerer special stuff
if SGroup_Exists("sg_SorcererAttack") and SGroup_Count("sg_SorcererAttack") > 0 and Prox_AnySquadNearMarker("sg_SorcererAttack", "mkr_mainbase_area") and Blueprint == "chaos_marine_squad" then
--SGroup_SetPlayerOwner(SGroup..Counter, g_Player7)
SGroup_SetPlayerOwner("sg_SorcererAttack", g_Player2)
Cmd_AttachSquads(SGroup..Counter, "sg_SorcererAttack")
end
Cmd_AttackMoveMarker(SGroup..Counter, "mkr_playerbase_attack"..RandomPoint)
if Blueprint == "chaos_squad_cultist" then
g_CultistCounter = g_CultistCounter + 1
elseif Blueprint == "chaos_squad_raptor" then
g_RaptorCounter = g_RaptorCounter + 1
elseif Blueprint == "chaos_marine_squad" then
g_SpaceMarineCounter = g_SpaceMarineCounter + 1
elseif Blueprint == "chaos_squad_predator" then
g_PredatorCounter = g_PredatorCounter + 1
elseif Blueprint == "chaos_squad_daemon_prince" then
g_PrinceCounter = g_PrinceCounter + 1
end
end
end
end
end
function InitialAttack() if g_Difficulty == 1 then MainBaseAttack() MainBaseAttack() elseif g_Difficulty == 2 then MainBaseAttack() MainBaseAttack() MainBaseAttack() elseif g_Difficulty == 3 then MainBaseAttack() MainBaseAttack() MainBaseAttack() MainBaseAttack() end g_InitialAttack = false Rule_Remove(InitialAttack) end
function SpawnRhinos() for i=1,2 do Util_CreateSquadsAtMarkerEx(g_Player7, "sg_Rhino"..i, "chaos_squad_rhino_sp_dxp3", "mkr_rhino"..i, 1, 1) end Player_GrantResearch(g_Player7, "chaos_smoke_launcher_research") end
function LoadRhinos()
for i=1,g_RhinoCount_BalanceTweak do
-- spawn the 3 sets of guys, load them into rhino..i
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_RhinoPosessed"..i, "chaos_squad_possessed_marine", "mkr_rhino"..i, 1, World_GetRand(5,8))
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_RhinoSpaceMarines"..i, "chaos_marine_squad", "mkr_rhino"..i, 1, World_GetRand(5,8))
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_RhinoZerkers"..i, "chaos_squad_khorne_berserker", "mkr_rhino"..i, 1, World_GetRand(4,6))
end
Rule_AddOneShot(PutUnitsInRhinos, 5)
end
function PutUnitsInRhinos() for i=1,g_RhinoCount_BalanceTweak do Cmd_EnterTransport("sg_RhinoPosessed"..i, "sg_Rhino".. i) Cmd_EnterTransport("sg_RhinoSpaceMarines"..i, "sg_Rhino".. i) Cmd_EnterTransport("sg_RhinoZerkers"..i, "sg_Rhino".. i) end end
function RhinoAttack() if EGroup_Exists("eg_Relic") and EGroup_IsCapturedByPlayer("eg_Relic", g_Player1, true) then Util_StartIntel(EVENTS.IE_RelicAttack) for i=1,g_RhinoCount_BalanceTweak do Cmd_MoveToMarker("sg_Rhino"..i, "mkr_rhino_dest"..i) end
if EGroup_Exists("eg_ChaosSideBase2Barracks") and EGroup_Count("eg_ChaosSideBase2Barracks") > 0 then
Util_CreateSquadsAtMarkerEx(g_Player8, "SeeingEyeCultistsRhinoAttack", "chaos_squad_cultist", "mkr_backbase_barracks", 1, World_GetRand(5,8))
Cmd_AttackMoveMarker("SeeingEyeCultistsRhinoAttack", "mkr_rhino_dest1")
end
Rule_Remove(RhinoAttack)
Rule_AddInterval(GetDudesOutOfRhinos, 1)
end
end
function GetDudesOutOfRhinos() for i=1,g_RhinoCount_BalanceTweak do if SGroup_Exists("sg_Rhino"..i) and Prox_AnySquadNearMarker("sg_Rhino"..i, "mkr_rhino_dest"..i) then -- alternatively, could use: Marker_InProximity(Marker_FromName("mkr_player_mainBase_HQ","basic_marker"), SGroup_GetPosition("sg_spotter_HQ"..i)) Cmd_EmptyTransport("sg_Rhino"..i, SGroup_GetPosition("sg_Rhino"..i)) Cmd_CastAbilityPos("sg_Rhino"..i, "chaos_smoke_launchers", Marker_GetPosition(Marker_FromName("mkr_smokescreen"..i, "basic_marker"))) g_EmptyRhinos = g_EmptyRhinos + 1 end end
local Count = 0
for i=1,g_RhinoCount_BalanceTweak do
if SGroup_Exists("sg_Rhino"..i) and SGroup_Count("sg_Rhino"..i) == 0 then
Count = Count + 1
end
end
if Count == g_RhinoCount_BalanceTweak then
Rule_Remove(GetDudesOutOfRhinos)
end
end
function RecaptureLP()
local Random = World_GetRand(1,10)
if Random >= 6 then
local Count = 0
local table_LP = {}
for i=1,7 do
if i <= 6 then
lp = "eg_LP"..i
else
lp = "eg_Relic"
end
if EGroup_IsCapturedByPlayer(lp, g_Player1, true) == true then
Count = Count + 1
table_LP[Count] = lp
end
end
if table.getn(table_LP) > 0 then
g_CapturePointPoint = table_LP[World_GetRand(1,table.getn(table_LP))]
if PopCheck(g_CaptureCounter, "sg_CaptureDudes", 3) then
-- 1st squad
g_CaptureCounter = g_CaptureCounter + 1
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_CaptureDudes"..g_CaptureCounter, "chaos_marine_squad", "mkr_mainbase_barracks", 1, World_GetRand(8,10))
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_CaptureDudes"..g_CaptureCounter), 1),"chaos_plasma_gun_tactical", World_GetRand(3,4))
SGroup_AddLeaders("sg_CaptureDudes"..g_CaptureCounter)
if g_Difficulty >= 2 then
-- 2nd squad
g_CaptureCounter = g_CaptureCounter + 1
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_CaptureDudes"..g_CaptureCounter, "chaos_marine_squad", "mkr_mainbase_barracks", 1, World_GetRand(8,10))
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_CaptureDudes"..g_CaptureCounter), 1),"chaos_plasma_gun_tactical", World_GetRand(3,4))
SGroup_AddLeaders("sg_CaptureDudes"..g_CaptureCounter)
end
end
-- loop through, att move everyone to the point
for i=1,g_CaptureCounter do
if SGroup_Exists("sg_CaptureDudes"..i) and SGroup_Count("sg_CaptureDudes"..i) > 0 then
Cmd_AttackMovePos("sg_CaptureDudes"..i, EGroup_GetPosition(g_CapturePointPoint))
end
end
end
end
if g_FirstRecapture == true then
g_FirstRecapture = false
Rule_AddInterval(ForceCapture, 5)
end
end
function ForceCapture() -- loop through all markers for i=1,7 do if i <= 6 then lp = "eg_LP"..i mkr = "mkr_lp"..i else lp = "eg_Relic" mkr = "mkr_reliclp" end -- loop through all capture guys for j=1,g_CaptureCounter do if SGroup_Exists("sg_CaptureDudes"..j) and SGroup_Count("sg_CaptureDudes"..j) > 0 then if Prox_AnySquadNearMarker("sg_CaptureDudes"..j, mkr) and EGroup_IsCapturedByPlayer(lp, g_Player1, true) == true then Cmd_Capture("sg_CaptureDudes"..j, lp) end end end end end
function SpawnDefilerBaseDefenseForce()
SGroup_Create("sg_DefilerBaseDefense")
-- raptors
for i=1,1 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_DefilerDefenseRaptors"..i, "chaos_squad_raptor", "mkr_raptordefense"..i, 1, 10)
SGroup_AddLeaders("sg_DefilerDefenseRaptors"..i)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DefilerDefenseRaptors"..i), 1),"chaos_flamer_raptor", 4)
SGroup_AddGroup("sg_DefilerBaseDefense", "sg_DefilerDefenseRaptors"..i)
end
-- possessed marines
--[[for i=1,1 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_DefilerDefenseMarines"..i, "chaos_squad_possessed_marine", "mkr_marinedefense"..i, 1, 10)
SGroup_AddLeaders("sg_DefilerDefenseMarines"..i)
SGroup_AddGroup("sg_DefilerBaseDefense", "sg_DefilerDefenseMarines"..i)
end]]
-- space marines
for i=1,1 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_DefilerDefenseMarines"..i, "chaos_marine_squad", "mkr_marinedefense"..i, 1, 10)
SGroup_AddLeaders("sg_DefilerDefenseMarines"..i)
SGroup_AddGroup("sg_DefilerBaseDefense", "sg_DefilerDefenseMarines"..i)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DefilerDefenseMarines"..i), 1),"chaos_heavy_bolter_tactical", World_GetRand(2,3))
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DefilerDefenseMarines"..i), 1),"chaos_plasma_gun_tactical", World_GetRand(2,3))
end
-- horrors
for i=1,1 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_DefilerDefenseHorrors"..i, "chaos_squad_horror", "mkr_horrordefense"..i, 1, 5)
SGroup_AddGroup("sg_DefilerBaseDefense", "sg_DefilerDefenseHorrors"..i)
end
-- predators
for i=1,1 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_DefilerDefensePredators"..i, "chaos_squad_predator", "mkr_predatordefense"..i, 1, 1)
SGroup_AddGroup("sg_DefilerBaseDefense", "sg_DefilerDefensePredators"..i)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DefilerDefensePredators"..i), 1),"chaos_autocannon_predator_improved", 1)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DefilerDefensePredators"..i), 1),"chaos_heavy_bolter_predator_r_improved", 1)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DefilerDefensePredators"..i), 1),"chaos_heavy_bolter_predator_l_improved", 1)
end
-- defiler wanderers
for i=1,2 do
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_DefilerDefenseDefilers"..i, "chaos_squad_defiler", "mkr_defilerdefense"..i, 1, 1)
SGroup_AddGroup("sg_DefilerBaseDefense", "sg_DefilerDefenseDefilers"..i)
end
end
function DefilerBaseDefenseAttack() if Player_AreSquadsNearMarker(g_Player1, "mkr_defilerbase") then for i=1,1 do -- deep strike obliterators (5) Util_CreateSquadsAtMarkerEx(g_Player2, "sg_DefilerDefenseObliterators"..i, "chaos_squad_obliterator", "mkr_mainbase_hq", 1, 5) SGroup_AddGroup("sg_DefilerBaseDefense", "sg_DefilerDefenseObliterators"..i) SGroup_DeSpawn("sg_DefilerDefenseObliterators"..i) Squad_DeepStrikeToPos(SGroup_FromName("sg_DefilerDefenseObliterators"..i), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName("mkr_obliteratordefense"..i, "basic_marker"))) end
for i=1,3 do
if SGroup_Exists("sg_DefilerDefenseRaptors"..i) and SGroup_Count("sg_DefilerDefenseRaptors"..i) > 0 then
Cmd_JumpToMarker("sg_DefilerDefenseRaptors"..i, "mkr_raptordefense_jump"..i)
end
end
Rule_Remove(DefilerBaseDefenseAttack)
Rule_Remove(DefilerBaseDefenseAttGround)
Rule_AddOneShot(AttackWithMainForce, 5)
end
end
function AttackWithMainForce() if SGroup_Exists("sg_DefilerBaseDefense") and SGroup_Count("sg_DefilerBaseDefense") > 0 then Cmd_AttackMoveMarker("sg_DefilerBaseDefense", "mkr_defilerdefenseattmovemarker") end Rule_AddInterval(DidPlayerDie, 1) end
function DefilerBaseDefenseAttGround() for i=1,3 do local Point = World_GetRand(1,8) if SGroup_Exists("sg_DefilerDefenseDefilers"..i) and SGroup_Count("sg_DefilerDefenseDefilers"..i) > 0 then Cmd_AttackGroundMarker("sg_DefilerDefenseDefilers"..i, "mkr_defiler_attackground"..Point) -- MAYBE USE THIS COMMAND?: --Util_AttackGroundMarkerRandomRadius end end end
function DidPlayerDie() if Player_AreSquadsNearMarker(g_Player1, "mkr_wruplayer1") == false and Player_AreSquadsNearMarker(g_Player1, "mkr_defilerbase") == false then if SGroup_Exists("sg_DefilerBaseDefense") and SGroup_Count("sg_DefilerBaseDefense") > 0 then Cmd_AttackMoveMarker("sg_DefilerBaseDefense", "mkr_pullback") end elseif Player_AreSquadsNearMarker(g_Player1, "mkr_wruplayer1") == true then if SGroup_Exists("sg_DefilerBaseDefense") and SGroup_Count("sg_DefilerBaseDefense") > 0 then Cmd_AttackMoveMarker("sg_DefilerBaseDefense", "mkr_defilerdefenseattmovemarker") end end end
function HereticSpawnAndRepair() local Count = 1 local t_DamagedBuildings = {} for i=1,11 do if EGroup_GetAvgHealth("eg_ChaosSideBase2Building"..i) < 1 then t_DamagedBuildings[Count] = i Count = Count + 1 end end
if table.getn(t_DamagedBuildings) > 0 then
Point = "eg_ChaosSideBase2Building"..t_DamagedBuildings[World_GetRand(1,table.getn(t_DamagedBuildings))]
if PopCheck(g_HereticCounter, "sg_Heretic", g_MaxHereticPop) and EGroup_Exists("eg_ChaosSideBase2Building1") and EGroup_Count("eg_ChaosSideBase2Building1") > 0 then
g_HereticCounter = g_HereticCounter + 1
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_Heretic"..g_HereticCounter, "chaos_squad_slave", "mkr_sidebase2_hq", 1, 1)
Command_SquadEntity(g_Player7, "sg_Heretic"..g_HereticCounter, SCMD_Repair, Point)
if g_ForcedLaborFlag == false then
Rule_AddOneShot(TurnOnForcedLabor, 8)
g_ForcedLaborFlag = true
end
end
end
end
function TurnOnForcedLabor() if SGroup_Exists("sg_Heretic"..g_HereticCounter) and SGroup_Count("sg_Heretic"..g_HereticCounter) > 0 then Cmd_CastAbilitySelf("sg_Heretic"..g_HereticCounter,"chaos_forced_labor") g_ForcedLaborFlag = false end end
function SpawnDreadnaughtBaseDefenseForce()
SGroup_Create("sg_DreadnaughtBaseDefense")
-- space marines
for i=1,4 do
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_DreadnaughtDefenseMarines"..i, "chaos_marine_squad", "mkr_dreadnaughtdefense_marines"..i, 1, 10)
SGroup_AddLeaders("sg_DreadnaughtDefenseMarines"..i)
SGroup_AddGroup("sg_DreadnaughtBaseDefense", "sg_DreadnaughtDefenseMarines"..i)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DreadnaughtDefenseMarines"..i), 1),"chaos_heavy_bolter_tactical", World_GetRand(2,3))
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DreadnaughtDefenseMarines"..i), 1),"chaos_plasma_gun_tactical", World_GetRand(2,3))
end
-- horrors
for i=1,3 do
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_DreadnaughtDefenseHorrors"..i, "chaos_squad_horror", "mkr_dreadnaughtdefense_horrors"..i, 1, 5)
SGroup_AddGroup("sg_DreadnaughtBaseDefense", "sg_DreadnaughtDefenseHorrors"..i)
end
-- predators
for i=1,2 do
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_DreadnaughtDefensePredators"..i, "chaos_squad_predator", "mkr_dreadnaughtdefense_predator"..i, 1, 1)
SGroup_AddGroup("sg_DreadnaughtBaseDefense", "sg_DreadnaughtDefensePredators"..i)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DreadnaughtDefensePredators"..i), 1),"chaos_autocannon_predator_improved", 1)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DreadnaughtDefensePredators"..i), 1),"chaos_heavy_bolter_predator_r_improved", 1)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DreadnaughtDefensePredators"..i), 1),"chaos_heavy_bolter_predator_l_improved", 1)
end
--dreadnoughts
for i=1,3 do
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_DreadnaughtDefenseDreadnaughts"..i, "chaos_squad_hell_talon", "mkr_dreadnaughtdefense_dn"..i, 1, 1)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_DreadnaughtDefenseDreadnaughts"..i), 1),"chaos_multi_melta_dreadnought", 1)
SGroup_AddGroup("sg_DreadnaughtBaseDefense", "sg_DreadnaughtDefenseDreadnaughts"..i)
end
end
function DreadnaughtBaseDefenseAttack() if Player_AreSquadsNearMarker(g_Player1, "mkr_dreadnaughtbase_right") and g_RightDNBaseFlag == false then -- deep strike obliterators (5) Util_CreateSquadsAtMarkerEx(g_Player7, "sg_DreadnaughtDefenseObliterators1", "chaos_squad_obliterator", "mkr_mainbase_hq", 1, 5) SGroup_AddGroup("sg_DreadnaughtBaseDefense", "sg_DreadnaughtDefenseObliterators1") SGroup_DeSpawn("sg_DreadnaughtDefenseObliterators1") Squad_DeepStrikeToPos(SGroup_FromName("sg_DreadnaughtDefenseObliterators1"), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName("mkr_dreadnaughtdefense_obliterators3", "basic_marker"))) g_RightDNBaseFlag = true end
if Player_AreSquadsNearMarker(g_Player1, "mkr_dreadnaughtbase_left") and g_LeftDNBaseFlag == false then
-- deep strike obliterators (5)
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_DreadnaughtDefenseObliterators2", "chaos_squad_obliterator", "mkr_mainbase_hq", 1, 5)
SGroup_AddGroup("sg_DreadnaughtBaseDefense", "sg_DreadnaughtDefenseObliterators2")
SGroup_DeSpawn("sg_DreadnaughtDefenseObliterators2")
Squad_DeepStrikeToPos(SGroup_FromName("sg_DreadnaughtDefenseObliterators2"), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName("mkr_dreadnaughtdefense_obliterators2", "basic_marker")))
g_LeftDNBaseFlag = true
end
--[[
if Player_AreSquadsNearMarker(g_Player1, "mkr_dreadnaughtbase_front") and g_FrontDNBaseFlag == false then
-- deep strike obliterators (5)
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_DreadnaughtDefenseObliterators3", "chaos_squad_obliterator", "mkr_mainbase_hq", 1, 5)
SGroup_AddGroup("sg_DreadnaughtBaseDefense", "sg_DreadnaughtDefenseObliterators3")
SGroup_DeSpawn("sg_DreadnaughtDefenseObliterators3")
Squad_DeepStrikeToPos(SGroup_FromName("sg_DreadnaughtDefenseObliterators3"), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName("mkr_dreadnaughtdefense_obliterators1", "basic_marker")))
g_FrontDNBaseFlag = true
end ]]
if g_FrontDNBaseFlag == true and g_LeftDNBaseFlag == true and g_RightDNBaseFlag == true then
Rule_Remove(DreadnaughtBaseDefenseAttack)
end
end
function SpawnMainBaseDefenseForce()
if g_TotalShrines <= 1 then
SGroup_Create("sg_MainBaseDefense")
-- possessed marines
for i=1,1 do -- 2
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_MainDefensePosdMarines"..i, "chaos_squad_possessed_marine", "mkr_mainbase_possessed"..i, 1, 10)
SGroup_AddLeaders("sg_MainDefensePosdMarines"..i)
SGroup_AddGroup("sg_MainBaseDefense", "sg_MainDefensePosdMarines"..i)
end
-- space marines
for i=1,2 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_MainDefenseMarines"..i, "chaos_marine_squad", "mkr_mainbase_marines"..i, 1, 10)
SGroup_AddLeaders("sg_MainDefenseMarines"..i)
SGroup_AddGroup("sg_MainBaseDefense", "sg_MainDefenseMarines"..i)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_MainDefenseMarines"..i), 1),"chaos_heavy_bolter_tactical", World_GetRand(2,3))
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_MainDefenseMarines"..i), 1),"chaos_plasma_gun_tactical", World_GetRand(2,3))
end
-- horrors
for i=1,2 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_MainDefenseHorrors"..i, "chaos_squad_horror", "mkr_mainbase_horrors"..i, 1, 5)
SGroup_AddGroup("sg_MainBaseDefense", "sg_MainDefenseHorrors"..i)
end
-- predators
for i=1,1 do
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_MainDefensePredators"..i, "chaos_squad_predator", "mkr_mainbase_predators"..i, 1, 1)
SGroup_AddGroup("sg_MainBaseDefense", "sg_MainDefensePredators"..i)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_MainDefensePredators"..i), 1),"chaos_autocannon_predator_improved", 1)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_MainDefensePredators"..i), 1),"chaos_heavy_bolter_predator_r_improved", 1)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_MainDefensePredators"..i), 1),"chaos_heavy_bolter_predator_l_improved", 1)
end
-- defiler
for i=1,1 do
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_MainDefenseMains"..i, "chaos_squad_defiler", "mkr_mainbase_defilers"..i, 1, 1)
SGroup_AddGroup("sg_MainBaseDefense", "sg_MainDefenseMains"..i)
end
-- cultists
for i=1,2 do
Util_CreateSquadsAtMarkerEx(g_Player8, "sg_MainDefenseCultists"..i, "chaos_squad_cultist", "mkr_mainbase_cultists"..i, 1, 10)
SGroup_AddLeaders("sg_MainDefenseCultists"..i)
SGroup_AddGroup("sg_MainBaseDefense", "sg_MainDefenseCultists"..i)
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_MainDefenseCultists"..i), 1),"chaos_plasma_gun_cultist", World_GetRand(2,3))
Squad_ForceUpgradeWeapons(SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_MainDefenseCultists"..i), 1),"chaos_grenade_launcher", World_GetRand(2,3))
end
for i=1,1 do -- 2
-- deep strike obliterators (5)
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_MainDefenseObliterators"..i, "chaos_squad_obliterator", "mkr_mainbase_hq", 1, 5)
SGroup_AddGroup("sg_MainBaseDefense", "sg_MainDefenseObliterators"..i)
SGroup_DeSpawn("sg_MainDefenseObliterators"..i)
Squad_DeepStrikeToPos(SGroup_FromName("sg_MainDefenseObliterators"..i), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName("mkr_mainbase_obliterators"..i, "basic_marker")))
end
-- zerkers
for i=1,1 do -- 2
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_MainDefenseZerker"..i, "chaos_squad_khorne_berserker", "mkr_mainbase_zerkers"..i, 1, 8)
SGroup_AddGroup("sg_MainBaseDefense", "sg_MainDefenseZerker"..i)
end
Rule_Remove(SpawnMainBaseDefenseForce)
end
end
function CheckForDefilerKill() -- add the objective if -- any defiler is killed for i=1, g_DefilerCounter do if SGroup_Exists("sg_Defiler"..i) and SGroup_Count("sg_Defiler"..i) == 0 then Rule_AddInterval(Rule_Objective_DestroyDefilerBase, 1) Rule_Remove(CheckForDefilerKill) return end end -- the player is anywhere near the base for i=1,2 do if Player_AreSquadsNearMarker(g_Player1, "mkr_wruplayer"..i) == true then Rule_AddInterval(Rule_Objective_DestroyDefilerBase, 1) Rule_Remove(CheckForDefilerKill) return end end -- or if the hq is dmged at all if EGroup_Exists("eg_ChaosSideBaseHQ") and EGroup_Count("eg_ChaosSideBaseHQ") > 0 and EGroup_IsUnderAttack("eg_ChaosSideBaseHQ", true) then Rule_AddInterval(Rule_Objective_DestroyDefilerBase, 1) Rule_Remove(CheckForDefilerKill) return end end
function Rule_Objective_DestroyDefilerBase()
--[[ Objective Successfull ]]
if Event_IsAnyRunning() == false and EGroup_Exists("eg_ChaosSideBaseHQ") and EGroup_Count("eg_ChaosSideBaseHQ") == 0 then
Util_ObjectiveComplete( Objective_DestroyDefilerBase.title_id )
Rule_Remove( Rule_Objective_DestroyDefilerBase)
Objective_PingRemove(Objective_DestroyDefilerBase.title_id, g_ping_obj)
--[[If the objective doesn't exist, we're going to create it ]]
else
if Event_IsAnyRunning() == false and Objective_Exists(Objective_DestroyDefilerBase.title_id) == false then
--[[Utility function to add objectives]]
Util_ObjectiveCreate(Objective_DestroyDefilerBase, false)
g_ping_obj = Objective_PingMarker(Objective_DestroyDefilerBase.title_id, "mkr_sidebase_hq", true, "default")
g_ping_obj_mini = Ping_Marker("mkr_sidebase_hq", false, "default")
Objective_SetDefaultSecondary(g_SecondaryObjectives)
g_SecondaryObjectives = g_SecondaryObjectives + 1
Objective_ShowScreen()
Rule_AddOneShot(DefilerIE, 10)
end
end
end
function CheckForDreadnaughtKill() for i=1,5 do if SGroup_Exists("sg_Dreadnoughts"..i) and SGroup_Count("sg_Dreadnoughts"..i) == 0 then Rule_AddInterval(Rule_Objective_DestroyDreadnaughtBase, 1) Rule_Remove(CheckForDreadnaughtKill) return true elseif Event_IsAnyRunning() == false and Objective_Exists(Objective_DestroyDreadnaughtBase.title_id) == false and Player_AreSquadsNearMarker(g_Player1, "mkr_dreadnaughtarea") then Rule_AddInterval(Rule_Objective_DestroyDreadnaughtBase, 1) Rule_Remove(CheckForDreadnaughtKill) return true end end end
function Rule_Objective_DestroyDreadnaughtBase()
--[[ Objective Successfull ]]
if Event_IsAnyRunning() == false and EGroup_Exists("eg_ChaosSideBase2Building1") and EGroup_Count("eg_ChaosSideBase2Building1") == 0 then
Util_ObjectiveComplete( Objective_DestroyDreadnaughtBase.title_id )
Rule_Remove( Rule_Objective_DestroyDreadnaughtBase)
Objective_PingRemove(Objective_DestroyDreadnaughtBase.title_id, g_ping_obj)
--[[If the objective doesn't exist, we're going to create it ]]
else
if Event_IsAnyRunning() == false and Objective_Exists(Objective_DestroyDreadnaughtBase.title_id) == false then
--[[Utility function to add objectives]]
Util_ObjectiveCreate(Objective_DestroyDreadnaughtBase, false)
g_ping_obj = Objective_PingMarker(Objective_DestroyDreadnaughtBase.title_id, "mkr_sidebase2_hq", true, "default")
g_ping_obj_mini = Ping_Marker("mkr_sidebase2_hq", false, "default")
Objective_SetDefaultSecondary(g_SecondaryObjectives)
g_SecondaryObjectives = g_SecondaryObjectives + 1
Objective_ShowScreen()
Rule_AddOneShot(DreadnoughtIE, 10)
end
end
end
function Rule_Objective_DestroyStronghold()
--[[ Objective Successfull ]]
if Event_IsAnyRunning() == false and EGroup_Exists("eg_ChaosHQ") and EGroup_Count("eg_ChaosHQ") == 0 then
Util_ObjectiveComplete( Objective_DestroyStronghold.title_id )
Rule_Remove( Rule_Objective_DestroyStronghold)
Objective_PingRemove(Objective_DestroyStronghold.title_id, g_ping_obj)
Rule_AddOneShot(CompleteScenario, 10)
--[[If the objective doesn't exist, we're going to create it ]]
else
if Event_IsAnyRunning() == false and Objective_Exists(Objective_DestroyStronghold.title_id) == false then
--[[Utility function to add objectives]]
Util_ObjectiveCreate(Objective_DestroyStronghold, true)
Rule_AddInterval(Rule_ShrineObjective, 13)
g_ping_obj = Objective_PingMarker(Objective_DestroyStronghold.title_id, "mkr_mainbase_hq", true, "default")
g_ping_obj_mini = Ping_Marker("mkr_mainbase_hq", false, "default")
Objective_SetDefaultPrimary(g_PrimaryObjectives)
g_PrimaryObjectives = g_PrimaryObjectives + 1
Rule_AddOneShot(IntroIE, 20)
end
end
end
function Rule_ShrineObjective() --[[ Objective Successfull ]] if Event_IsAnyRunning() == false and g_TotalShrines == 0 then
Util_ObjectiveComplete( Objective_DestroyShrines.title_id )
Rule_Remove( Rule_ShrineObjective)
--[[If the objective doesn't exist, we're going to create it ]]
else
if Event_IsAnyRunning() == false and Objective_Exists(Objective_DestroyShrines.title_id) == false then
--[[Utility function to add objectives]]
Objective_SubAdd(Objective_DestroyShrines, Objective_DestroyStronghold.title_id)
for i=1,5 do
g_ping_obj_shrine[i] = Objective_PingMarker(Objective_DestroyShrines.title_id, "mkr_shrine"..i, true, "default")
g_ping_obj_mini = Ping_Marker("mkr_shrine"..i, false, "default")
end
Objective_SetDefaultPrimary(g_PrimaryObjectives)
g_PrimaryObjectives = g_PrimaryObjectives + 1
if g_Debug == false then Objective_ShowScreen() end
--CreateCounter()
--Rule_AddInterval(Display_ChaosStormPower, 1)
Rule_AddInterval(PingShrinesEveryXSeconds, g_PingShrinesEveryXSeconds)
end
end
end
function CreateCounter()
UI_ShowCountDXP("ChaosStorm", g_Player1, 3950030, g_CounterDisplay )
end
function Display_ChaosStormPower()
if g_TotalShrines == 5 then
g_CounterDisplay = 100
elseif g_TotalShrines == 4 then
g_CounterDisplay = 91
elseif g_TotalShrines == 3 then
g_CounterDisplay = 82
elseif g_TotalShrines == 2 then
g_CounterDisplay = 69
elseif g_TotalShrines == 1 then
g_CounterDisplay = 42
elseif g_TotalShrines == 0 then
g_CounterDisplay = 0
if EGroup_Exists("eg_ChaosHQ") and EGroup_Count("eg_ChaosHQ") == 0 then
Rule_Remove(Display_ChaosStormPower)
UI_HideCount( "ChaosStorm" )
return Display
end
end
UI_ShowCountUpdateDxp("ChaosStorm", g_CounterDisplay, 3950030)
end
function PingShrinesEveryXSeconds() for i=1,5 do if EGroup_Exists("eg_Shrine"..i) and EGroup_GetAvgHealth("eg_Shrine"..i) > 0 then Ping_Marker("mkr_shrine"..i, false, "default") end end end
function CompleteScenario() Rule_RemoveAll() -- JOSH: uncomment the lines in this function to make the closing nis play. if g_Debug == false then WXP_OpeningNISPreset( ) Util_StartNIS( EVENTS.NIS_Closing ) end Rule_AddInterval(CompleteScenarioWin, 1) end
function CompleteScenarioWin() if Event_IsAnyRunning() == false then World_SetGameOver() end end
function SpawnSorcererAttack() Player_GrantResearch(g_Player2, "chaos_sorcerer_research_1") Player_GrantResearch(g_Player3, "chaos_sorcerer_research_1") Player_GrantResearch(g_Player4, "chaos_sorcerer_research_1") Player_GrantResearch(g_Player5, "chaos_sorcerer_research_1") Player_GrantResearch(g_Player6, "chaos_sorcerer_research_1") Player_GrantResearch(g_Player7, "chaos_sorcerer_research_1") Player_GrantResearch(g_Player8, "chaos_sorcerer_research_1")
Player_GrantResearch(g_Player2, "chaos_sorcerer_research_2")
Player_GrantResearch(g_Player3, "chaos_sorcerer_research_2")
Player_GrantResearch(g_Player4, "chaos_sorcerer_research_2")
Player_GrantResearch(g_Player5, "chaos_sorcerer_research_2")
Player_GrantResearch(g_Player6, "chaos_sorcerer_research_2")
Player_GrantResearch(g_Player7, "chaos_sorcerer_research_2")
Player_GrantResearch(g_Player8, "chaos_sorcerer_research_2")
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_SorcererAttack", "chaos_squad_sorcerer_sp_dxp3", "mkr_sorcerer", 1, 1)
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_SorcererAttackSquad", "chaos_squad_khorne_berserker", "mkr_sorcerer", 1, 8)
--Cmd_AttachSquads("sg_SorcererAttackSquad", "sg_SorcererAttack")
end
function SorcererAttack() for i=1,2 do if Player_AreSquadsNearMarker(g_Player1, "mkr_sorcererattack"..i) then Util_StartIntel(EVENTS.IE_SorcererAmbush) if SGroup_Exists("sg_SorcererAttack") and SGroup_Count("sg_SorcererAttack") > 0 then Player_GetAllSquadsNearMarker(g_Player1, "sg_SquadsNearSorcerer", "mkr_sorcererattack"..i) Cmd_CastAbilitySGroup("sg_SorcererAttack", "chaos_chains_of_torment", "sg_SquadsNearSorcerer") Rule_AddOneShot(CastSpell1, 3) Rule_Remove(SorcererAttack) return elseif SGroup_Exists("sg_SorcererAttack") and SGroup_Count("sg_SorcererAttack") == 0 then Rule_Remove(SorcererAttack) return end end end end
function CastSpell1() if SGroup_Exists("sg_SquadsNearSorcerer") and SGroup_Count("sg_SquadsNearSorcerer") > 0 then if SGroup_Exists("sg_SorcererAttack") and SGroup_Count("sg_SorcererAttack") > 0 then Cmd_CastAbilityPos("sg_SorcererAttack", "chaos_corruption", SGroup_GetPosition("sg_SquadsNearSorcerer")) Rule_AddOneShot(CastSpell2, 3) end end end
function CastSpell2() if SGroup_Exists("sg_SquadsNearSorcerer") and SGroup_Count("sg_SquadsNearSorcerer") > 0 then if SGroup_Exists("sg_SorcererAttack") and SGroup_Count("sg_SorcererAttack") > 0 then Cmd_CastAbilityPos("sg_SorcererAttack", "chaos_doombolt", SGroup_GetPosition("sg_SquadsNearSorcerer")) Rule_AddOneShot(TeleportOut, 4) end end end
function TeleportOut() if SGroup_Exists("sg_SorcererAttack") and SGroup_Count("sg_SorcererAttack") > 0 then Cmd_JumpToMarker("sg_SorcererAttack", "mkr_mainbase_barracks") Rule_Remove(TeleportOut) Rule_AddInterval(UseSkillsOnPlayerBase, 1) end end
function UseSkillsOnPlayerBase() for i=1,2 do if Prox_AnySquadNearMarker("sg_SorcererAttack", "mkr_playerbase_attack"..i) then if SGroup_Exists("sg_SorcererAttack") and SGroup_Count("sg_SorcererAttack") > 0 then Player_GetAllSquadsNearMarker(g_Player1, "sg_PlayerBaseUnits", "mkr_playerbase_area"..i) if SGroup_Exists("sg_PlayerBaseUnits") and SGroup_CountSpawned("sg_PlayerBaseUnits") > 0 then SGroup_Create("sg_PlayerBaseSorcererTarget") SGroup_Add("sg_PlayerBaseSorcererTarget",SGroup_GetSpawnedSquadAt(SGroup_FromName("sg_PlayerBaseUnits"), World_GetRand(1, SGroup_Count("sg_PlayerBaseUnits")))) Cmd_CastAbilitySGroup("sg_SorcererAttack", "chaos_chains_of_torment", "sg_PlayerBaseSorcererTarget") Rule_AddOneShot(CastSpell1_Playerbase, 3) Rule_Remove(UseSkillsOnPlayerBase) return true end end end end end
function CastSpell1_Playerbase() if SGroup_Exists("sg_PlayerBaseSorcererTarget") and SGroup_Count("sg_PlayerBaseSorcererTarget") > 0 then if SGroup_Exists("sg_SorcererAttack") and SGroup_Count("sg_SorcererAttack") > 0 then Cmd_CastAbilityPos("sg_SorcererAttack", "chaos_corruption", SGroup_GetPosition("sg_PlayerBaseSorcererTarget")) Rule_AddOneShot(CastSpell2_Playerbase, 3) end end end
function CastSpell2_Playerbase() if SGroup_Exists("sg_PlayerBaseSorcererTarget") and SGroup_Count("sg_PlayerBaseSorcererTarget") > 0 then if SGroup_Exists("sg_SorcererAttack") and SGroup_Count("sg_SorcererAttack") > 0 then Cmd_CastAbilityPos("sg_SorcererAttack", "chaos_doombolt", SGroup_GetPosition("sg_PlayerBaseSorcererTarget")) end end end
function SpawnChaosLord() if Player_AreSquadsNearMarker(g_Player1, "mkr_shrinearea2") then Util_StartIntel(EVENTS.IE_LordAmbush) Util_CreateSquadsAtMarkerEx(g_Player7, "sg_LordAttack", "chaos_squad_lord", "mkr_mainbase_barracks", 1, 1) Cmd_AttackMoveMarker("sg_LordAttack", "mkr_shrinearea2") Rule_Remove(SpawnChaosLord) Rule_AddInterval(DaemonPrince, 1) end end
function DaemonPrince() if Prox_AllSquadsNearMarker("sg_LordAttack", "mkr_shrinearea2") or SGroup_GetAvgHealth("sg_LordAttack") < .9 then if SGroup_Exists("sg_LordAttack") and SGroup_Count("sg_LordAttack") > 0 then Player_GrantResearch(g_Player2, "chaos_daemon_prince_research") Player_GrantResearch(g_Player3, "chaos_daemon_prince_research") Player_GrantResearch(g_Player4, "chaos_daemon_prince_research") Player_GrantResearch(g_Player5, "chaos_daemon_prince_research") Player_GrantResearch(g_Player6, "chaos_daemon_prince_research") Player_GrantResearch(g_Player7, "chaos_daemon_prince_research") Player_GrantResearch(g_Player8, "chaos_daemon_prince_research")
Player_GrantResearch(g_Player2, "chaos_lord_research_1")
Player_GrantResearch(g_Player3, "chaos_lord_research_1")
Player_GrantResearch(g_Player4, "chaos_lord_research_1")
Player_GrantResearch(g_Player5, "chaos_lord_research_1")
Player_GrantResearch(g_Player6, "chaos_lord_research_1")
Player_GrantResearch(g_Player7, "chaos_lord_research_1")
Player_GrantResearch(g_Player8, "chaos_lord_research_1")
Player_GrantResearch(g_Player2, "chaos_lord_research_2")
Player_GrantResearch(g_Player3, "chaos_lord_research_2")
Player_GrantResearch(g_Player4, "chaos_lord_research_2")
Player_GrantResearch(g_Player5, "chaos_lord_research_2")
Player_GrantResearch(g_Player6, "chaos_lord_research_2")
Player_GrantResearch(g_Player7, "chaos_lord_research_2")
Player_GrantResearch(g_Player8, "chaos_lord_research_2")
Cmd_Possesion("sg_LordAttack")
Rule_Remove(DaemonPrince)
Rule_AddInterval(DaemonPrincePowers, 6)
end
end
end
function DaemonPrincePowers() if SGroup_Exists("sg_LordAttack") and SGroup_Count("sg_LordAttack") > 0 then if SGroup_Exists("sg_LordAttackSquad") and SGroup_Count("sg_LordAttackSquad") > 0 then Cmd_CastAbilitySelf("sg_LordAttack", "chaos_daemon_strength_daemon_prince") Rule_Remove(DaemonPrincePowers) Rule_AddInterval(DaemonPrincePowers2, 7) end end end
function DaemonPrincePowers2() if SGroup_Exists("sg_LordAttack") and SGroup_Count("sg_LordAttack") > 0 then Cmd_CastAbilitySelf("sg_LordAttack", "chaos_fear_roar") Rule_AddInterval(DaemonPrinceWander, 10) Rule_AddInterval(DaemonPrinceDefenseWander, 10) Rule_Remove(DaemonPrincePowers2) end end
function DaemonPrinceWander() if SGroup_Exists("sg_LordAttack") and SGroup_Count("sg_LordAttack") > 0 then if Player_AreSquadsNearMarker(g_Player1, "mkr_shrinearea2") == false and EGroup_Exists("eg_Shrine2") and EGroup_Count("eg_Shrine2") == 0 then SGroup_SetPlayerOwner("sg_LordAttack", g_Player2) Cmd_AttackMoveMarker("sg_LordAttack", "mkr_wander8") Rule_Remove(DaemonPrinceWander) end end end
function DaemonPrinceDefenseWander() if SGroup_Exists("sg_LordAttackSquad") and SGroup_Count("sg_LordAttackSquad") > 0 then if Player_AreSquadsNearMarker(g_Player1, "mkr_shrinearea2") == false and EGroup_Exists("eg_Shrine2") and EGroup_Count("eg_Shrine2") == 0 then SGroup_SetPlayerOwner("sg_LordAttackSquad", g_Player2) Cmd_AttackMoveMarker("sg_LordAttackSquad", "mkr_wander8") Rule_Remove(DaemonPrinceDefenseWander) end end end
function StartSecondaryObjectives() if Player_AreSquadsNearMarker(g_Player1, "mkr_cityentrance") then Rule_AddOneShot(EnterCity, 5) Rule_AddOneShot(CityMusing, 240) Rule_AddInterval(Obliterator_Horrors, 1) g_SecondaryObjectiveFlag = true Rule_Remove(StartSecondaryObjectives) end end
function SpawnCityEntranceDefenseForce()
SGroup_CreateIfNotFound("sg_CityD")
-- space marines
for i=1,1 do
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_CityDefenseMarines"..i, "chaos_marine_squad", "mkr_cityentrance_marines"..i, 1, 10)
SGroup_AddLeaders("sg_CityDefenseMarines"..i)
SGroup_AddGroup("sg_CityD", "sg_CityDefenseMarines"..i)
end
-- cultists
for i=1,2 do
Util_CreateSquadsAtMarkerEx(g_Player6, "sg_CityDefenseCultists"..i, "chaos_squad_cultist", "mkr_cityentrance_cultists"..i, 1, 10)
SGroup_AddLeaders("sg_CityDefenseCultists"..i)
SGroup_AddGroup("sg_CityD", "sg_CityDefenseCultists"..i)
end
-- raptors
for i=1,1 do
Util_CreateSquadsAtMarkerEx(g_Player7, "sg_CityDefenseRaptors"..i, "chaos_squad_raptor", "mkr_cityentrance_raptors"..i, 1, 10)
SGroup_AddLeaders("sg_CityDefenseRaptors"..i)
SGroup_AddGroup("sg_CityD", "sg_CityDefenseRaptors"..i)
end
Rule_AddInterval(CityDefenseRage, 2)
Rule_Remove(SpawnCityEntranceDefenseForce)
end
function CityDefenseBreached() local flag = false g_CityDBreachedCounter = g_CityDBreachedCounter + 1 if g_CityDBreachedCounter >= g_CityDBreachedTimer then flag = true end
if (SGroup_Exists("sg_CityD") and SGroup_Count("sg_CityD") <= 1) or flag == true or EGroup_IsCapturedByPlayer("eg_LP1", g_Player1, true) then
Rule_AddInterval(SpawnDefilers, g_SpawnDefilerTimer)
Rule_AddInterval(SpawnDreadnoughts, g_SpawnDreadnoughtTimer)
Rule_AddInterval(SpawnDaemonsAtShrines, g_SpawnShrineDaemonTimer)
Rule_Remove(CityDefenseBreached)
end
end
function CityDefenseRage() for i=1,2 do if SGroup_Exists("sg_CityDefenseMarines"..i) and SGroup_Count("sg_CityDefenseMarines"..i) > 0 and SGroup_GetAvgHealth("sg_CityDefenseMarines"..i) < .92 and SGroup_HasLeader("sg_CityDefenseMarines"..i, true) then Cmd_CastAbilitySelf("sg_CityDefenseMarines"..i, "chaos_furious_rage") end end
for i=1,2 do
if SGroup_Exists("sg_CityDefenseCultists"..i) and SGroup_Count("sg_CityDefenseCultists"..i) > 0 and SGroup_GetAvgHealth("sg_CityDefenseCultists"..i) < .92 and SGroup_HasLeader("sg_CityDefenseCultists"..i, true) then
Cmd_CastAbilitySelf("sg_CityDefenseCultists"..i, "chaos_furious_rage")
end
end
for i=1,1 do
if SGroup_Exists("sg_CityDefenseRaptors"..i) and SGroup_Count("sg_CityDefenseRaptors"..i) > 0 and SGroup_GetAvgHealth("sg_CityDefenseRaptors"..i) < .92 and SGroup_HasLeader("sg_CityDefenseRaptors"..i, true) then
Cmd_CastAbilitySelf("sg_CityDefenseRaptors"..i, "chaos_furious_rage")
end
end
end
function Rule_GrantResearch()
if g_ResearchCounter == 0 then
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_01_manreaper_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_02_accursed_crozius_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_03_plasma_pistol_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_04_melta_gun_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_05_helm_of_lorgar_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_06_daemonic_armor_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_07_daemonic_gauntlets_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_08_runic_boots_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_09_banner_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_10_daemonic_ascension_research")
Player_GrantResearch(g_Player2, "chaos_wargear_upgrade_research")
end
g_ResearchCounter = g_ResearchCounter + 1
if g_ResearchCounter == 1 then
Player_GrantResearch(g_Player2, "chaos_accuracy_upgrade_research")
Player_GrantResearch(g_Player3, "chaos_accuracy_upgrade_research")
Player_GrantResearch(g_Player4, "chaos_accuracy_upgrade_research")
Player_GrantResearch(g_Player5, "chaos_accuracy_upgrade_research")
Player_GrantResearch(g_Player6, "chaos_accuracy_upgrade_research")
Player_GrantResearch(g_Player7, "chaos_accuracy_upgrade_research")
Player_GrantResearch(g_Player8, "chaos_accuracy_upgrade_research")
Player_GrantResearch(g_Player2, "chaos_max_weapons_research")
Player_GrantResearch(g_Player3, "chaos_max_weapons_research")
Player_GrantResearch(g_Player4, "chaos_max_weapons_research")
Player_GrantResearch(g_Player5, "chaos_max_weapons_research")
Player_GrantResearch(g_Player6, "chaos_max_weapons_research")
Player_GrantResearch(g_Player7, "chaos_max_weapons_research")
Player_GrantResearch(g_Player8, "chaos_max_weapons_research")
Player_GrantResearch(g_Player2, "chaos_frag_grenade_research")
Player_GrantResearch(g_Player3, "chaos_frag_grenade_research")
Player_GrantResearch(g_Player4, "chaos_frag_grenade_research")
Player_GrantResearch(g_Player5, "chaos_frag_grenade_research")
Player_GrantResearch(g_Player6, "chaos_frag_grenade_research")
Player_GrantResearch(g_Player7, "chaos_frag_grenade_research")
Player_GrantResearch(g_Player8, "chaos_frag_grenade_research")
Player_GrantResearch(g_Player2, "chaos_move_through_cover_research")
Player_GrantResearch(g_Player3, "chaos_move_through_cover_research")
Player_GrantResearch(g_Player4, "chaos_move_through_cover_research")
Player_GrantResearch(g_Player5, "chaos_move_through_cover_research")
Player_GrantResearch(g_Player6, "chaos_move_through_cover_research")
Player_GrantResearch(g_Player7, "chaos_move_through_cover_research")
Player_GrantResearch(g_Player8, "chaos_move_through_cover_research")
Player_GrantResearch(g_Player2, "chaos_purge_the_weak")
Player_GrantResearch(g_Player3, "chaos_purge_the_weak")
Player_GrantResearch(g_Player4, "chaos_purge_the_weak")
Player_GrantResearch(g_Player5, "chaos_purge_the_weak")
Player_GrantResearch(g_Player6, "chaos_purge_the_weak")
Player_GrantResearch(g_Player7, "chaos_purge_the_weak")
Player_GrantResearch(g_Player8, "chaos_purge_the_weak")
Player_GrantResearch(g_Player2, "chaos_research")
Player_GrantResearch(g_Player3, "chaos_research")
Player_GrantResearch(g_Player4, "chaos_research")
Player_GrantResearch(g_Player5, "chaos_research")
Player_GrantResearch(g_Player6, "chaos_research")
Player_GrantResearch(g_Player7, "chaos_research")
Player_GrantResearch(g_Player8, "chaos_research")
Player_GrantResearch(g_Player2, "chaos_berserker_fear_research")
Player_GrantResearch(g_Player3, "chaos_berserker_fear_research")
Player_GrantResearch(g_Player4, "chaos_berserker_fear_research")
Player_GrantResearch(g_Player5, "chaos_berserker_fear_research")
Player_GrantResearch(g_Player6, "chaos_berserker_fear_research")
Player_GrantResearch(g_Player7, "chaos_berserker_fear_research")
Player_GrantResearch(g_Player8, "chaos_berserker_fear_research")
Player_GrantResearch(g_Player2, "chaos_plasma_pistol_research")
Player_GrantResearch(g_Player3, "chaos_plasma_pistol_research")
Player_GrantResearch(g_Player4, "chaos_plasma_pistol_research")
Player_GrantResearch(g_Player5, "chaos_plasma_pistol_research")
Player_GrantResearch(g_Player6, "chaos_plasma_pistol_research")
Player_GrantResearch(g_Player7, "chaos_plasma_pistol_research")
Player_GrantResearch(g_Player8, "chaos_plasma_pistol_research")
elseif g_ResearchCounter ==2 then
Player_GrantResearch(g_Player2, "chaos_champion_melee_research_1")
Player_GrantResearch(g_Player3, "chaos_champion_melee_research_1")
Player_GrantResearch(g_Player4, "chaos_champion_melee_research_1")
Player_GrantResearch(g_Player5, "chaos_champion_melee_research_1")
Player_GrantResearch(g_Player6, "chaos_champion_melee_research_1")
Player_GrantResearch(g_Player7, "chaos_champion_melee_research_1")
Player_GrantResearch(g_Player8, "chaos_champion_melee_research_1")
Player_GrantResearch(g_Player2, "chaos_health_upgrade_research")
Player_GrantResearch(g_Player3, "chaos_health_upgrade_research")
Player_GrantResearch(g_Player4, "chaos_health_upgrade_research")
Player_GrantResearch(g_Player5, "chaos_health_upgrade_research")
Player_GrantResearch(g_Player6, "chaos_health_upgrade_research")
Player_GrantResearch(g_Player7, "chaos_health_upgrade_research")
Player_GrantResearch(g_Player8, "chaos_health_upgrade_research")
Player_GrantResearch(g_Player2, "chaos_projectiles")
Player_GrantResearch(g_Player3, "chaos_projectiles")
Player_GrantResearch(g_Player4, "chaos_projectiles")
Player_GrantResearch(g_Player5, "chaos_projectiles")
Player_GrantResearch(g_Player6, "chaos_projectiles")
Player_GrantResearch(g_Player7, "chaos_projectiles")
Player_GrantResearch(g_Player8, "chaos_projectiles")
elseif g_ResearchCounter ==3 then
Player_GrantResearch(g_Player2, "chaos_accuracy_upgrade_research_2")
Player_GrantResearch(g_Player3, "chaos_accuracy_upgrade_research_2")
Player_GrantResearch(g_Player4, "chaos_accuracy_upgrade_research_2")
Player_GrantResearch(g_Player5, "chaos_accuracy_upgrade_research_2")
Player_GrantResearch(g_Player6, "chaos_accuracy_upgrade_research_2")
Player_GrantResearch(g_Player7, "chaos_accuracy_upgrade_research_2")
Player_GrantResearch(g_Player8, "chaos_accuracy_upgrade_research_2")
Player_GrantResearch(g_Player2, "chaos_commander_health_research_1")
Player_GrantResearch(g_Player3, "chaos_commander_health_research_1")
Player_GrantResearch(g_Player4, "chaos_commander_health_research_1")
Player_GrantResearch(g_Player5, "chaos_commander_health_research_1")
Player_GrantResearch(g_Player6, "chaos_commander_health_research_1")
Player_GrantResearch(g_Player7, "chaos_commander_health_research_1")
Player_GrantResearch(g_Player8, "chaos_commander_health_research_1")
Player_GrantResearch(g_Player2, "chaos_power_research_1")
Player_GrantResearch(g_Player3, "chaos_power_research_1")
Player_GrantResearch(g_Player4, "chaos_power_research_1")
Player_GrantResearch(g_Player5, "chaos_power_research_1")
Player_GrantResearch(g_Player6, "chaos_power_research_1")
Player_GrantResearch(g_Player7, "chaos_power_research_1")
Player_GrantResearch(g_Player8, "chaos_power_research_1")
Player_GrantResearch(g_Player2, "chaos_cultist_sight_research")
Player_GrantResearch(g_Player3, "chaos_cultist_sight_research")
Player_GrantResearch(g_Player4, "chaos_cultist_sight_research")
Player_GrantResearch(g_Player5, "chaos_cultist_sight_research")
Player_GrantResearch(g_Player6, "chaos_cultist_sight_research")
Player_GrantResearch(g_Player7, "chaos_cultist_sight_research")
elseif g_ResearchCounter ==4 then
Player_GrantResearch(g_Player2, "chaos_health_upgrade_research_2")
Player_GrantResearch(g_Player3, "chaos_health_upgrade_research_2")
Player_GrantResearch(g_Player4, "chaos_health_upgrade_research_2")
Player_GrantResearch(g_Player5, "chaos_health_upgrade_research_2")
Player_GrantResearch(g_Player6, "chaos_health_upgrade_research_2")
Player_GrantResearch(g_Player7, "chaos_health_upgrade_research_2")
Player_GrantResearch(g_Player8, "chaos_health_upgrade_research_2")
elseif g_ResearchCounter ==5 then
Player_GrantResearch(g_Player2, "chaos_power_research_2")
Player_GrantResearch(g_Player3, "chaos_power_research_2")
Player_GrantResearch(g_Player4, "chaos_power_research_2")
Player_GrantResearch(g_Player5, "chaos_power_research_2")
Player_GrantResearch(g_Player6, "chaos_power_research_2")
Player_GrantResearch(g_Player7, "chaos_power_research_2")
Player_GrantResearch(g_Player8, "chaos_power_research_2")
Player_GrantResearch(g_Player2, "chaos_ranged_skill_research")
Player_GrantResearch(g_Player3, "chaos_ranged_skill_research")
Player_GrantResearch(g_Player4, "chaos_ranged_skill_research")
Player_GrantResearch(g_Player5, "chaos_ranged_skill_research")
Player_GrantResearch(g_Player6, "chaos_ranged_skill_research")
Player_GrantResearch(g_Player7, "chaos_ranged_skill_research")
Player_GrantResearch(g_Player8, "chaos_ranged_skill_research")
Player_GrantResearch(g_Player2, "chaos_champion_melee_research_2")
Player_GrantResearch(g_Player3, "chaos_champion_melee_research_2")
Player_GrantResearch(g_Player4, "chaos_champion_melee_research_2")
Player_GrantResearch(g_Player5, "chaos_champion_melee_research_2")
Player_GrantResearch(g_Player6, "chaos_champion_melee_research_2")
Player_GrantResearch(g_Player7, "chaos_champion_melee_research_2")
Player_GrantResearch(g_Player8, "chaos_champion_melee_research_2")
elseif g_ResearchCounter ==6 then
Player_GrantResearch(g_Player2, "chaos_commander_health_research_2")
Player_GrantResearch(g_Player3, "chaos_commander_health_research_2")
Player_GrantResearch(g_Player4, "chaos_commander_health_research_2")
Player_GrantResearch(g_Player5, "chaos_commander_health_research_2")
Player_GrantResearch(g_Player6, "chaos_commander_health_research_2")
Player_GrantResearch(g_Player7, "chaos_commander_health_research_2")
Player_GrantResearch(g_Player8, "chaos_commander_health_research_2")
Player_GrantResearch(g_Player2, "chaos_raptor_research")
Player_GrantResearch(g_Player3, "chaos_raptor_research")
Player_GrantResearch(g_Player4, "chaos_raptor_research")
Player_GrantResearch(g_Player5, "chaos_raptor_research")
Player_GrantResearch(g_Player6, "chaos_raptor_research")
Player_GrantResearch(g_Player7, "chaos_raptor_research")
Player_GrantResearch(g_Player8, "chaos_raptor_research")
elseif g_ResearchCounter ==7 then
Player_GrantResearch(g_Player2, "chaos_furious_charge_research")
Player_GrantResearch(g_Player3, "chaos_furious_charge_research")
Player_GrantResearch(g_Player4, "chaos_furious_charge_research")
Player_GrantResearch(g_Player5, "chaos_furious_charge_research")
Player_GrantResearch(g_Player6, "chaos_furious_charge_research")
Player_GrantResearch(g_Player7, "chaos_furious_charge_research")
Player_GrantResearch(g_Player8, "chaos_furious_charge_research")
Player_GrantResearch(g_Player2, "chaos_possessed_daemon_fire_research")
Player_GrantResearch(g_Player3, "chaos_possessed_daemon_fire_research")
Player_GrantResearch(g_Player4, "chaos_possessed_daemon_fire_research")
Player_GrantResearch(g_Player5, "chaos_possessed_daemon_fire_research")
Player_GrantResearch(g_Player6, "chaos_possessed_daemon_fire_research")
Player_GrantResearch(g_Player7, "chaos_possessed_daemon_fire_research")
Player_GrantResearch(g_Player8, "chaos_possessed_daemon_fire_research")
elseif g_ResearchCounter ==8 then
Player_GrantResearch(g_Player2, "chaos_possessed_daemon_flight_research")
Player_GrantResearch(g_Player3, "chaos_possessed_daemon_flight_research")
Player_GrantResearch(g_Player4, "chaos_possessed_daemon_flight_research")
Player_GrantResearch(g_Player5, "chaos_possessed_daemon_flight_research")
Player_GrantResearch(g_Player6, "chaos_possessed_daemon_flight_research")
Player_GrantResearch(g_Player7, "chaos_possessed_daemon_flight_research")
Player_GrantResearch(g_Player8, "chaos_possessed_daemon_flight_research")
Player_GrantResearch(g_Player2, "chaos_possessed_daemon_talons_research")
Player_GrantResearch(g_Player3, "chaos_possessed_daemon_talons_research")
Player_GrantResearch(g_Player4, "chaos_possessed_daemon_talons_research")
Player_GrantResearch(g_Player5, "chaos_possessed_daemon_talons_research")
Player_GrantResearch(g_Player6, "chaos_possessed_daemon_talons_research")
Player_GrantResearch(g_Player7, "chaos_possessed_daemon_talons_research")
Player_GrantResearch(g_Player8, "chaos_possessed_daemon_talons_research")
Player_GrantResearch(g_Player2, "chaos_possessed_daemon_visage_research")
Player_GrantResearch(g_Player3, "chaos_possessed_daemon_visage_research")
Player_GrantResearch(g_Player4, "chaos_possessed_daemon_visage_research")
Player_GrantResearch(g_Player5, "chaos_possessed_daemon_visage_research")
Player_GrantResearch(g_Player6, "chaos_possessed_daemon_visage_research")
Player_GrantResearch(g_Player7, "chaos_possessed_daemon_visage_research")
Player_GrantResearch(g_Player8, "chaos_possessed_daemon_visage_research")
elseif g_ResearchCounter ==9 then
Player_GrantResearch(g_Player2, "chaos_possessed_daemon_mutation_research")
Player_GrantResearch(g_Player3, "chaos_possessed_daemon_mutation_research")
Player_GrantResearch(g_Player4, "chaos_possessed_daemon_mutation_research")
Player_GrantResearch(g_Player5, "chaos_possessed_daemon_mutation_research")
Player_GrantResearch(g_Player6, "chaos_possessed_daemon_mutation_research")
Player_GrantResearch(g_Player7, "chaos_possessed_daemon_mutation_research")
Player_GrantResearch(g_Player8, "chaos_possessed_daemon_mutation_research")
--[[Player_GrantResearch(g_Player2, "chaos_infiltration_marine_research")
Player_GrantResearch(g_Player3, "chaos_infiltration_marine_research")
Player_GrantResearch(g_Player4, "chaos_infiltration_marine_research")
Player_GrantResearch(g_Player5, "chaos_infiltration_marine_research")
Player_GrantResearch(g_Player6, "chaos_infiltration_marine_research")
Player_GrantResearch(g_Player7, "chaos_infiltration_marine_research")
Player_GrantResearch(g_Player8, "chaos_infiltration_marine_research")]]
--[[Player_GrantResearch(g_Player2, "chaos_infiltration_research")
Player_GrantResearch(g_Player3, "chaos_infiltration_research")
Player_GrantResearch(g_Player4, "chaos_infiltration_research")
Player_GrantResearch(g_Player5, "chaos_infiltration_research")
Player_GrantResearch(g_Player6, "chaos_infiltration_research")
Player_GrantResearch(g_Player7, "chaos_infiltration_research")
Player_GrantResearch(g_Player8, "chaos_infiltration_research")]]
elseif g_ResearchCounter ==10 then
Rule_Remove(Rule_GrantResearch)
end
end
function Obliterator_Horrors() -- cooldown if g_OblitAndHorrorOKToDropFlag == false then g_OblitAndHorrorCooldown = g_OblitAndHorrorCooldown + 1 if g_OblitAndHorrorCooldown >= g_OblitAndHorrorInPlayerBaseCooldown then g_OblitAndHorrorOKToDropFlag = true g_OblitAndHorrorCooldown = 0 end end
for i=1,2 do
if Player_AreSquadsNearMarker(g_Player2, "mkr_playerbase_area"..i) then
for j=1,g_OblitAndHorrorCounter do
if SGroup_Exists("sg_PlayerBaseHorror"..j) and SGroup_Count("sg_PlayerBaseHorror"..j) then
if Prox_AnySquadNearMarker("sg_PlayerBaseHorror"..j, "mkr_playerbase_area"..i) then
--Cmd_AttackMoveMarker("sg_PlayerBaseHorror"..j, "mkr_Player_HQ")
Cmd_AttackMovePos("sg_PlayerBaseHorror"..j, g_GlobalAttackPos)
end
end
if SGroup_Exists("sg_PlayerBaseOblit"..j) and SGroup_Count("sg_PlayerBaseOblit"..j) then
if Prox_AnySquadNearMarker("sg_PlayerBaseOblit"..j, "mkr_playerbase_area"..i) then
--Cmd_AttackMoveMarker("sg_PlayerBaseOblit"..j, "mkr_Player_HQ")
Cmd_AttackMovePos("sg_PlayerBaseOblit"..j, g_GlobalAttackPos)
end
end
end
end
end
-- hmm, if the p2 units are in the area for a long time, this check is going to eventually pass... rethink this one
if World_GetRand(1,10) > 8 then
if (Player_AreSquadsNearMarker(g_Player2, "mkr_playerbase_area1") or Player_AreSquadsNearMarker(g_Player2, "mkr_playerbase_area2")) and g_OblitAndHorrorOKToDropFlag == true then
g_OblitAndHorrorOKToDropFlag = false
SGroup_CreateIfNotFound("sg_P2SquadsInPlayerBase1")
SGroup_CreateIfNotFound("sg_P2SquadsInPlayerBase2")
SGroup_Clear("sg_P2SquadsInPlayerBase1")
SGroup_Clear("sg_P2SquadsInPlayerBase2")
Player_GetAllSquadsNearMarker(g_Player2, "sg_P2SquadsInPlayerBase1", "mkr_playerbase_area1")
Player_GetAllSquadsNearMarker(g_Player2, "sg_P2SquadsInPlayerBase2", "mkr_playerbase_area2")
local Drop = ""
if SGroup_Count("sg_P2SquadsInPlayerBase1") > SGroup_Count("sg_P2SquadsInPlayerBase2") then
Drop = "mkr_playerbase_area1"
else
Drop = "mkr_playerbase_area2"
end
if g_Difficulty == 2 then
-- horrors
if PopCheck(g_OblitAndHorrorCounter, "sg_PlayerBaseHorror", 1) then
g_OblitAndHorrorCounter = g_OblitAndHorrorCounter + 1
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_PlayerBaseHorror"..g_OblitAndHorrorCounter, "chaos_squad_horror", "mkr_mainbase_hq", 1, 5)
SGroup_DeSpawn("sg_PlayerBaseHorror"..g_OblitAndHorrorCounter)
Squad_DeepStrikeToPos(SGroup_FromName("sg_PlayerBaseHorror"..g_OblitAndHorrorCounter), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName(Drop, "basic_marker")))
end
elseif g_Difficulty == 3 then
-- horrors and obliterators
if PopCheck(g_OblitAndHorrorCounter, "sg_PlayerBaseHorror", 1) then
g_OblitAndHorrorCounter = g_OblitAndHorrorCounter + 1
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_PlayerBaseHorror"..g_OblitAndHorrorCounter, "chaos_squad_horror", "mkr_mainbase_hq", 1, 5)
SGroup_DeSpawn("sg_PlayerBaseHorror"..g_OblitAndHorrorCounter)
Squad_DeepStrikeToPos(SGroup_FromName("sg_PlayerBaseHorror"..g_OblitAndHorrorCounter), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName(Drop, "basic_marker")))
end
if PopCheck(g_OblitAndHorrorCounter, "sg_PlayerBaseOblit", 1) then
g_OblitAndHorrorCounter = g_OblitAndHorrorCounter + 1
Util_CreateSquadsAtMarkerEx(g_Player2, "sg_PlayerBaseOblit"..g_OblitAndHorrorCounter, "chaos_squad_obliterator", "mkr_mainbase_hq", 1, 5)
SGroup_DeSpawn("sg_PlayerBaseOblit"..g_OblitAndHorrorCounter)
Squad_DeepStrikeToPos(SGroup_FromName("sg_PlayerBaseOblit"..g_OblitAndHorrorCounter), "chaos_sacrificial_circle", Marker_GetPosition(Marker_FromName(Drop, "basic_marker")))
end
elseif g_Difficulty == 1 then
Rule_Remove(Obliterator_Horrors)
return
end
end
end
end
function IntelligentlyMoveAttacks() if EGroup_Exists("eg_Player_HQ") and EGroup_Count("eg_Player_HQ") == 0 then -- find the next HQ to attack Race = MetaMap_GetPlayerNRaceName(0) if Race == "chaos_marine_race" then hqbp = "chaos_hq" elseif Race == "guard_race" then hqbp = "guard_hq" elseif Race == "ork_race" then hqbp = "ork_hq" elseif Race == "space_marine_race" then hqbp = "space_marine_hq" elseif Race == "tau_race" then hqbp = "tau_hq" elseif Race == "necron_race" then hqbp = "monolith" elseif Race == "eldar_race" then hqbp = "eldar_hq" elseif Race == "dark_eldar_race" then hqbp = "dark_eldar_hq" elseif Race == "sisters_race" then hqbp = "sisters_hq" end Player_GetEntities( g_Player1 ) if EGroup_Exists("__Player1000Entities") and EGroup_CountSpawned("__Player1000Entities") > 0 then EGroup_CreateIfNotFound("eg_targettemp") EGroup_CreateIfNotFound("eg_GlobalAttackTarget") EGroup_Clear("eg_targettemp") EGroup_Clear("eg_GlobalAttackTarget") Util_GetEntitiesByBP( "__Player1000Entities", "eg_targettemp", hqbp ) if EGroup_Exists("eg_targettemp") and EGroup_Count("eg_targettemp") > 0 then EGroup_Add("eg_GlobalAttackTarget", EGroup_GetSpawnedEntityAt(EGroup_FromName("eg_targettemp"), 1)) end if EGroup_Exists("eg_GlobalAttackTarget") and EGroup_Count("eg_GlobalAttackTarget") > 0 then -- pick the first item in the egroup to attack g_GlobalAttackPos = EGroup_GetPosition("eg_GlobalAttackTarget") else -- search for another building to attack EGroup_Clear("eg_GlobalAttackTarget") local Rand = World_GetRand(1,EGroup_CountSpawned("__Player1000Entities")) EGroup_Add("eg_GlobalAttackTarget", EGroup_GetSpawnedEntityAt(EGroup_FromName("__Player1000Entities"), Rand)) g_GlobalAttackPos = EGroup_GetPosition("eg_GlobalAttackTarget") end else -- the player should lose if they have no entities left Lose() end else g_GlobalAttackPos = EGroup_GetPosition("eg_Player_HQ") end end
function Lose() if Player_HasBuildingsExcept(g_Player1, t_building_exceptions) == false then if Player_HasSquadsExcept(g_Player1, t_unit_exceptions ) == false then Rule_RemoveAll() Fade_Start(4, false) World_SetTeamWin( g_Player2, "" ) Rule_AddIntervalEx( GameOver,5,1 ) end end end
function GameOver() World_SetGameOver() end
--[[(((((((((((((IE's)))))))))))))]]
function IntroIE() if MetaMap_GetPlayerRaceName() == "space_marine_race" then Util_StartIntel(EVENTS.IE_SM_Intro) else Util_StartIntel(EVENTS.IE_Intro) end end
function EnterMainBaseEarlyIE() if Player_AreSquadsNearMarker(g_Player1, "mkr_mainbase_area") and g_TotalShrines >= 1 then Util_StartIntel(EVENTS.IE_EnterMainBaseEarly) if MetaMap_GetPlayerRaceName() == "eldar_race" then Util_StartIntel(EVENTS.IE_Eldar_DontEnterCityEarly) elseif MetaMap_GetPlayerRaceName() == "guard_race" then Util_StartIntel(EVENTS.IE_IG_DontEnterCityEarly) elseif MetaMap_GetPlayerRaceName() == "necron_race" then Util_StartIntel(EVENTS.IE_Necron_DontEnterCityEarly) elseif MetaMap_GetPlayerRaceName() == "ork_race" then Util_StartIntel(EVENTS.IE_Ork_DontEnterCityEarly) elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then Util_StartIntel(EVENTS.IE_SM_DontEnterCityEarly) elseif MetaMap_GetPlayerRaceName() == "tau_race" then Util_StartIntel(EVENTS.IE_Tau_DontEnterCityEarly) elseif MetaMap_GetPlayerRaceName() == "sisters_race" then Util_StartIntel(EVENTS.IE_Sisters_DontEnterCityEarly) elseif MetaMap_GetPlayerRaceName() == "dark_eldar_race" then Util_StartIntel(EVENTS.IE_DE_DontEnterCityEarly) end Rule_Remove(EnterMainBaseEarlyIE) end end
function ShrineIEs() if g_TotalShrines == 4 and t_ShrineIE[4] == false then t_ShrineIE[4] = true Util_StartIntel(EVENTS.IE_Shrine_FirstKill) elseif g_TotalShrines == 2 and t_ShrineIE[2] == false then t_ShrineIE[2] = true Util_StartIntel(EVENTS.IE_Shrine_ThirdKill) elseif g_TotalShrines == 1 and t_ShrineIE[1] == false then t_ShrineIE[1] = true Util_StartIntel(EVENTS.IE_Shrine_FourthKill) elseif g_TotalShrines == 0 and t_ShrineIE[3] == false then t_ShrineIE[3] = true Util_StartIntel(EVENTS.IE_Shrine_FifthKill) Rule_Remove(ShrineIEs) end end
function DefilerIE() Util_StartIntel(EVENTS.IE_Defiler_FirstKill) end
function DreadnoughtIE() if MetaMap_GetPlayerRaceName() == "eldar_race" then Util_StartIntel(EVENTS.IE_Eldar_FirstAirKill) elseif MetaMap_GetPlayerRaceName() == "guard_race" then Util_StartIntel(EVENTS.IE_IG_FirstAirKill) elseif MetaMap_GetPlayerRaceName() == "necron_race" then Util_StartIntel(EVENTS.IE_Necron_FirstAirKill) elseif MetaMap_GetPlayerRaceName() == "ork_race" then Util_StartIntel(EVENTS.IE_Ork_FirstAirKill) elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then Util_StartIntel(EVENTS.IE_SM_FirstAirKill) elseif MetaMap_GetPlayerRaceName() == "tau_race" then Util_StartIntel(EVENTS.IE_Tau_FirstAirKill) elseif MetaMap_GetPlayerRaceName() == "sisters_race" then Util_StartIntel(EVENTS.IE_Sisters_FirstAirKill) elseif MetaMap_GetPlayerRaceName() == "dark_eldar_race" then Util_StartIntel(EVENTS.IE_DE_FirstAirKill) end end
function TrapIE() if MetaMap_GetPlayerRaceName() == "eldar_race" then Util_StartIntel(EVENTS.IE_Eldar_CornerAmbush) elseif MetaMap_GetPlayerRaceName() == "guard_race" then Util_StartIntel(EVENTS.IE_IG_CornerAmbush) elseif MetaMap_GetPlayerRaceName() == "necron_race" then Util_StartIntel(EVENTS.IE_Necron_CornerAmbush) elseif MetaMap_GetPlayerRaceName() == "ork_race" then Util_StartIntel(EVENTS.IE_Ork_CornerAmbush) elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then Util_StartIntel(EVENTS.IE_SM_CornerAmbush) elseif MetaMap_GetPlayerRaceName() == "tau_race" then Util_StartIntel(EVENTS.IE_Tau_CornerAmbush) elseif MetaMap_GetPlayerRaceName() == "sisters_race" then Util_StartIntel(EVENTS.IE_Sisters_CornerAmbush) elseif MetaMap_GetPlayerRaceName() == "dark_eldar_race" then Util_StartIntel(EVENTS.IE_DE_CornerAmbush) end end
function EnterCity() if MetaMap_GetPlayerRaceName() == "eldar_race" then Util_StartIntel(EVENTS.IE_Eldar_EnterCity) elseif MetaMap_GetPlayerRaceName() == "guard_race" then Util_StartIntel(EVENTS.IE_IG_EnterCity) elseif MetaMap_GetPlayerRaceName() == "necron_race" then Util_StartIntel(EVENTS.IE_Necron_EnterCity) elseif MetaMap_GetPlayerRaceName() == "ork_race" then Util_StartIntel(EVENTS.IE_Ork_EnterCity) elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then Util_StartIntel(EVENTS.IE_SM_EnterCity) elseif MetaMap_GetPlayerRaceName() == "tau_race" then Util_StartIntel(EVENTS.IE_Tau_EnterCity) elseif MetaMap_GetPlayerRaceName() == "sisters_race" then Util_StartIntel(EVENTS.IE_Sisters_EnterCity) elseif MetaMap_GetPlayerRaceName() == "dark_eldar_race" then Util_StartIntel(EVENTS.IE_DE_EnterCity) end end
function CityMusing() if MetaMap_GetPlayerRaceName() == "eldar_race" then Util_StartIntel(EVENTS.IE_Eldar_Muses) elseif MetaMap_GetPlayerRaceName() == "guard_race" then Util_StartIntel(EVENTS.IE_IG_Muses) elseif MetaMap_GetPlayerRaceName() == "necron_race" then Util_StartIntel(EVENTS.IE_Necron_Muses) elseif MetaMap_GetPlayerRaceName() == "ork_race" then Util_StartIntel(EVENTS.IE_Ork_Muses) elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then Util_StartIntel(EVENTS.IE_SM_Muses) elseif MetaMap_GetPlayerRaceName() == "tau_race" then Util_StartIntel(EVENTS.IE_Tau_Muses) elseif MetaMap_GetPlayerRaceName() == "sisters_race" then Util_StartIntel(EVENTS.IE_Sisters_Muses) elseif MetaMap_GetPlayerRaceName() == "dark_eldar_race" then Util_StartIntel(EVENTS.IE_DE_Muses) end end
function DaemonsFromShrineIE() local flag = false for i=1,5 do if EGroup_Exists("eg_Shrine"..i) and EGroup_Count("eg_Shrine"..i) > 0 then if EGroup_GetAvgHealth("eg_Shrine"..i) < 1 then Rule_Remove(DaemonsFromShrineIE) flag = true end end end
if flag == true then
if MetaMap_GetPlayerRaceName() == "eldar_race" then
Util_StartIntel(EVENTS.IE_Eldar_SeeFirstShrine)
elseif MetaMap_GetPlayerRaceName() == "guard_race" then
Util_StartIntel(EVENTS.IE_IG_SeeFirstShrine)
elseif MetaMap_GetPlayerRaceName() == "necron_race" then
Util_StartIntel(EVENTS.IE_Necron_SeeFirstShrine)
elseif MetaMap_GetPlayerRaceName() == "ork_race" then
Util_StartIntel(EVENTS.IE_Ork_SeeFirstShrine)
elseif MetaMap_GetPlayerRaceName() == "space_marine_race" then
Util_StartIntel(EVENTS.IE_SM_SeeFirstShrine)
elseif MetaMap_GetPlayerRaceName() == "tau_race" then
Util_StartIntel(EVENTS.IE_Tau_SeeFirstShrine)
elseif MetaMap_GetPlayerRaceName() == "sisters_race" then
Util_StartIntel(EVENTS.IE_Sisters_SeeFirstShrine)
elseif MetaMap_GetPlayerRaceName() == "dark_eldar_race" then
Util_StartIntel(EVENTS.IE_DE_SeeFirstShrine)
end
end
end
function FinalFightIE() if Player_AreSquadsNearMarker(g_Player1, "mkr_mainbase_area") then if g_TotalShrines == 0 then Util_StartIntel(EVENTS.IE_FinalFight) Rule_Remove(FinalFightIE) end end end