--	Stratagus Map - Single player campaign

Load("campaigns/human-exp/levelx12h_c2.sms")

Briefing(
  title,
  objectives,
  "../campaigns/human/interface/introscreen1.png",
  "campaigns/human-exp/levelx12h.txt",
  {"campaigns/human-exp/levelx12h-intro1.wav",
   "campaigns/human-exp/levelx12h-intro2.wav"}
)

AddTrigger(
  function() return GetPlayerData(15, "UnitTypesCount", "unit-dark-portal") == 0 end,
  function() return ActionVictory() end)
AddTrigger(
  function() return GetPlayerData(GetThisPlayer(), "TotalNumUnits") == 0 end,
  function() return ActionDefeat() end)
AddTrigger(
  function() return GetPlayerData(GetThisPlayer(), "UnitTypesCount", "unit-white-mage") == 0 and
    GetPlayerData(4, "UnitTypesCount", "unit-white-mage") == 0 end,
  function() return ActionDefeat() end)

local hum_exp_12a_loop_funcs = {
	function() DebugPrint("Looping !\n") return false end,
	function() return AiSleep(100) end,
	function() return AiForce(1, {AiSoldier(), 1, AiShooter(), 1}, true) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	function() stratagus.gameData.AIState.loop_index[1 + AiPlayer()] = 0; return false end,
}

local hum_exp_10c_loop_funcs = {
	function() DebugPrint("Looping !\n") return false end,
	function() return AiForce(1, {AiSoldier(), 4, AiShooter(), 4, AiCavalry(), 5, AiCatapult(), 2, AiMage(), 2}) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	function() stratagus.gameData.AIState.loop_index[1 + AiPlayer()] = 0; return false end,
}

local hum_exp_09b_loop_funcs = {
	function() DebugPrint("Looping !\n") return false end,
	function() return AiSleep(3000) end,
	function() return AiForce(1, {AiFlyer(), 2}) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	function() return AiForce(2, {AiSoldier(), 5, AiShooter(), 3, AiCavalry(), 3, AiCatapult(), 1}) end,
	function() return AiWaitForce(2) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(2) end,
	function() stratagus.gameData.AIState.loop_index[1 + AiPlayer()] = 0; return false end,
}

local hum_exp_12a_funcs = {	
	function() return AiLoop(hum_exp_12a_loop_funcs, stratagus.gameData.AIState.loop_index) end,
}

local hum_exp_10c_funcs = {
	function() return AiSet(AiWorker(), 1) end,
	function() return AiNeed(AiCityCenter()) end,
	function() return AiNeed(AiLumberMill()) end,
	function() return AiNeed(AiBarracks()) end,
	function() return AiUpgradeTo(AiBetterCityCenter()) end,

	function() return AiNeed(AiBlacksmith()) end,
	function() return AiNeed(AiStables()) end,
	function() return AiNeed(AiScientific()) end,
	function() return AiNeed(AiTower()) end,
	function() return AiNeed(AiTower()) end,
	function() return AiUpgradeTo(AiGuardTower()) end,
	function() return AiUpgradeTo(AiGuardTower()) end,
	function() return AiNeed(AiTower()) end,
	function() return AiUpgradeTo(AiGuardTower()) end,
	function() return AiUpgradeTo(AiBestCityCenter()) end,
	
	function() return AiResearch(AiUpgradeWeapon1()) end,
	function() return AiResearch(AiUpgradeArmor1()) end,
	function() return AiResearch(AiUpgradeMissile1()) end,
	function() return AiResearch(AiUpgradeWeapon2()) end,
	function() return AiResearch(AiUpgradeArmor2()) end,
	
	function() return AiNeed(AiTemple()) end,
	function() return AiNeed(AiMageTower()) end,
	function() return AiResearch(AiUpgradeCavalryMage()) end,
	function() return AiResearch(AiCavalryMageSpell1()) end,
	function() return AiResearch(AiMageSpell5()) end,
	function() return AiWait(AiBetterCityCenter()) end,
	function() return AiWait(AiBestCityCenter()) end,
	
	function() return AiForce(0, {AiScout(), 1}) end,
	function() return AiForce(1, {AiSoldier(), 3, AiShooter(), 4, AiCavalry(), 4, AiCatapult(), 1}) end,
	function() return AiWaitForce(1) end,
	function() return AiSleep(2000) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	function() return AiForce(1, {AiSoldier(), 3, AiShooter(), 4, AiCavalry(), 4, AiCatapult(), 1}) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiLoop(hum_exp_10c_loop_funcs, stratagus.gameData.AIState.loop_index) end,
}

local hum_exp_09b_funcs = {
	function() return AiSet(AiWorker(), 1) end,
	function() return AiNeed(AiCityCenter()) end,
	function() return AiNeed(AiLumberMill()) end,
	function() return AiNeed(AiBarracks()) end,
	function() return AiSet(AiWorker(), 9) end,
	function() return AiWait(AiWorker()) end,
	function() return AiForce(0, {AiSoldier(), 3, AiShooter(), 2}) end,
	function() return AiUpgradeTo(AiBetterCityCenter()) end,
	function() return AiWait(AiBetterCityCenter()) end,
	function() return AiNeed(AiBlacksmith()) end,
	function() return AiNeed(AiStables()) end,
	function() return AiNeed(AiScientific()) end,
	
	function() return AiNeed(AiTower()) end,
	function() return AiNeed(AiTower()) end,
	function() return AiUpgradeTo(AiGuardTower()) end,
	function() return AiNeed(AiTower()) end,
	function() return AiUpgradeTo(AiGuardTower()) end,
	function() return AiUpgradeTo(AiGuardTower()) end,	
	function() return AiUpgradeTo(AiBestCityCenter()) end,
	function() return AiWait(AiBestCityCenter()) end,
	function() return AiNeed(AiAirport()) end,
	
	function() return AiForce(1, {AiFlyer(), 1}) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiResearch(AiUpgradeWeapon1()) end,
	function() return AiResearch(AiUpgradeArmor1()) end,
	function() return AiResearch(AiUpgradeMissile1()) end,
	function() return AiResearch(AiUpgradeArmor2()) end,
	function() return AiResearch(AiUpgradeMissile2()) end,
	
	function() return AiForce(1, {AiFlyer(), 3}) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiLoop(hum_exp_09b_loop_funcs, stratagus.gameData.AIState.loop_index) end,
}

function AiHumanExp09b() return AiLoop(hum_exp_09b_funcs, stratagus.gameData.AIState.index) end
function AiHumanExp10c() return AiLoop(hum_exp_10c_funcs, stratagus.gameData.AIState.index) end
function AiHumanExp12a() return AiLoop(hum_exp_12a_funcs, stratagus.gameData.AIState.index) end
DefineAi("hum-exp-9b", "*", "hum-exp-9b", AiHumanExp09b)
DefineAi("hum-exp-10c", "*", "hum-exp-10c", AiHumanExp10c)
DefineAi("hum-exp-12a", "*", "hum-exp-12a", AiHumanExp12a)


--Units
DefineAllowNormalHumanUnits("AAAAAAAAAAAAAAAA")
DefineAllowExtraHumanUnits("FFFFFFFFFFFFFFFF")
DefineAllowNormalOrcUnits("AAAAAAAAAAAAAAAA")
DefineAllowExtraOrcUnits("FFFFFFFFFFFFFFFF")
DefineAllowSpecialUnits("FFFFFFFFFFFFFFFF")
DefineAllowHumanAlways()
DefineAllowOrcAlways()
DefineAllow("upgrade-holy-vision", "RRRRRRRRRRRRRRRR")
DefineAllow("upgrade-healing", "RRRRRRRRRRRRRRRR")
DefineAllow("upgrade-exorcism", "RRRRRRRRRRRRRRRR")


Load("campaigns/human-exp/levelx12h.sms")
