--	Stratagus Map - Single player campaign

Load("campaigns/orc-exp/levelx06o_c2.sms")

Briefing(
  title,
  objectives,
  "../campaigns/orc/interface/introscreen5.png",
  "campaigns/orc-exp/levelx06o.txt",
  {"campaigns/orc-exp/levelx06o-intro1.wav",
   "campaigns/orc-exp/levelx06o-intro2.wav"}
)

-- FIXME: Check if units are destroyed.
AddTrigger(
  function() return GetPlayerData(GetThisPlayer(), "UnitTypesCount", "unit-evil-knight") == 1 and
    GetNumOpponents(GetThisPlayer()) == 0 end,
  function() return ActionVictory() end)

AddTrigger(
  function() return GetPlayerData(GetThisPlayer(), "UnitTypesCount", "unit-evil-knight") == 0 and
    GetPlayerData(7, "UnitTypesCount", "unit-evil-knight") == 0 end,
  function() return ActionDefeat() end)

AddTrigger(
  function() return GetPlayerData(GetThisPlayer(), "TotalNumUnits") == 0 end,
  function() return ActionDefeat() end)

--Units
DefineAllowNormalHumanUnits("AAAAAAAAAAAAAAAA")
DefineAllowExtraHumanUnits("FFFFFFFFFFFFFFFF")
DefineAllowNormalOrcUnits("AAAAAAAAAAAAAAAA")
DefineAllowExtraOrcUnits("FFFFFFFFFFFFFFFF")
DefineAllowSpecialUnits("FFFFFFFFFFFFFFFF")
DefineAllowHumanAlways()
DefineAllowOrcAlways()

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

local orc_exp_06b_loop_funcs = {
	function() DebugPrint("Looping !\n") return false end,
	function() return AiSleep(5000) end,
	function() return AiForce(2, {AiFlyer(), 4}, true) 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 orc_exp_06a_funcs = {
	function() return AiNeed(AiCityCenter()) end,
	function() return AiSet(AiWorker(), 8) end,
	function() return AiWait(AiWorker()) end,
	function() return AiNeed(AiLumberMill()) end,
	function() return AiNeed(AiBarracks()) end,
	function() return AiNeed(AiBlacksmith()) end,
	function() return AiForce(1, {AiSoldier(), 5, AiShooter(), 4}) end,
	function() return AiWaitForce(1) end,
	function() return AiSleep(2000) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiResearch(AiUpgradeArmor1()) end,
	function() return AiUpgradeTo(AiBetterCityCenter()) end,
	function() return AiWait(AiBetterCityCenter()) end,
	function() return AiForce(1, {AiSoldier(), 5, AiShooter(), 4}) end,
	function() return AiWaitForce(1) end,
	function() return AiSleep(2000) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiResearch(AiUpgradeWeapon1()) end,
	function() return AiNeed(AiStables()) end,
	function() return AiSleep(8000) end,
	function() return AiSet(AiWorker(), 12) end,
	function() return AiResearch(AiUpgradeMissile1()) end,
	function() return AiResearch(AiUpgradeWeapon2()) end,
	function() return AiResearch(AiUpgradeArmor2()) end,
	function() return AiResearch(AiUpgradeMissile2()) end,
	function() return AiUpgradeTo(AiBestCityCenter()) end,
	function() return AiWait(AiBestCityCenter()) end,
	function() return AiForce(1, {AiSoldier(), 3, AiShooter(), 3, AiCavalry(), 3, AiCatapult(), 1}, true) end,
	function() return AiWaitForce(1) end,
	function() return AiSleep(2000) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiSleep(5000) end,
	function() return AiForce(1, {AiSoldier(), 3, AiShooter(), 3, AiCavalry(), 3, AiCatapult(), 1}, true) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	function() return AiSleep(7000) end,
	function() return AiForce(1, {AiSoldier(), 3, AiShooter(), 3, AiCavalry(), 3, AiCatapult(), 1}, true) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiNeed(AiTemple()) end,
	function() return AiNeed(AiBarracks()) end,
	function() return AiResearch(AiUpgradeCavalryMage()) end,
	function() return AiNeed(AiMageTower()) end,
	function() return AiSleep(4000) end,
	function() return AiResearch(AiCavalryMageSpell1()) end,
	function() return AiResearch(AiCavalryMageSpell2()) end,
	function() return AiResearch(AiUpgradeEliteShooter()) end,
	function() return AiResearch(AiMageSpell4()) end,
	function() return AiResearch(AiUpgradeEliteShooter2()) end,
	
	function() return AiForce(1, {AiSoldier(), 3, AiShooter(), 3, AiCavalry(), 3, AiCatapult(), 1, AiMage(), 3}, true) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	function() return AiSleep(4000) end,
	function() return AiResearch(AiMageSpell5()) end,
	function() return AiNeed(AiAirport()) end,
	function() return AiForce(2, {AiFlyer(), 2}, true) end,
	function() return AiWaitForce(2) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(2) end,
	
	function() return AiResearch(AiMageSpell1()) end,
	function() return AiForce(1, {AiSoldier(), 2, AiShooter(), 3, AiCavalry(), 5, AiCatapult(), 2, AiMage(), 3}, true) end,
	function() return AiWaitForce(1) end,
	function() return AiSleep(2000) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	function() return AiSleep(4000) end,
	
	function() return AiResearch(AiMageSpell3()) end,
	function() return AiResearch(AiUpgradeEliteShooter1()) end,
	function() return AiForce(2, {AiFlyer(), 2}, true) end,
	function() return AiWaitForce(2) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(2) end,
	
	function() return AiSet(AiWorker(), 14) end,
	function() return AiResearch(AiMageSpell2()) end,
	function() return AiResearch(AiUpgradeEliteShooter3()) end,
	function() return AiResearch(AiUpgradeCatapult1()) end,
	function() return AiSleep(3000) end,
	function() return AiForce(2, {AiFlyer(), 2}, true) end,
	function() return AiWaitForce(2) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(2) end,
	
	function() return AiNeed(AiTower()) end,
	function() return AiUpgradeTo(AiGuardTower()) end,
	function() return AiResearch(AiUpgradeCatapult2()) end,
	function() return AiForce(1, {AiSoldier(), 2, AiShooter(), 3, AiCavalry(), 5, AiCatapult(), 2, AiMage(), 3}, true) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	function() return AiSleep(5000) end,
	
	function() return AiLoop(orc_exp_06a_loop_funcs, stratagus.gameData.AIState.loop_index) end,
}

local orc_exp_06b_funcs = {
	function() return AiSet(AiWorker(), 4) end,
	
	function() return AiLoop(orc_exp_06b_loop_funcs, stratagus.gameData.AIState.loop_index) end,
}

function AiOrcExp06a() return AiLoop(orc_exp_06a_funcs, stratagus.gameData.AIState.index) end
function AiOrcExp06b() return AiLoop(orc_exp_06b_funcs, stratagus.gameData.AIState.index) end
DefineAi("orc-exp-6a", "*", "orc-exp-6a", AiOrcExp06a)
DefineAi("orc-exp-6b", "*", "orc-exp-6b", AiOrcExp06b)

Load("campaigns/orc-exp/levelx06o.sms")
