--	Stratagus Map - Single player campaign

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

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

-- FIXME: Check if units are destroyed.
AddTrigger(
  function() return GetNumOpponents(GetThisPlayer()) == 0 end,
  function() return ActionVictory() 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()
DefineAllow("unit-dragon", "FFFFFFFFFFFFFFFF")
DefineAllow("unit-dragon-roost", "FFFFFFFFFFFFFFFF")

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

local orc_exp_03_funcs = {
	function() return AiSet(AiWorker(), 1) end,
	function() return AiNeed(AiCityCenter()) end,
	function() return AiNeed(AiBarracks()) end,
	function() return AiSet(AiWorker(), 8) end,
	function() return AiWait(AiWorker()) end,
	function() return AiNeed(AiLumberMill()) end,
	function() return AiNeed(AiBlacksmith()) end,
	
	function() return AiForce(1, {AiSoldier(), 5}) end,
	function() return AiSleep(1000) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiSleep(8000) end,
	function() return AiSet(AiWorker(), 10) end,
	function() return AiForce(1, {AiSoldier(), 5, AiShooter(), 4}) 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(AiUpgradeEliteShooter()) end,
	function() return AiSleep(8000) end,
	function() return AiForce(1, {AiSoldier(), 4, AiShooter(), 4}, true) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiUpgradeTo(AiBetterCityCenter()) end,
	function() return AiSleep(8000) end,
	function() return AiForce(1, {AiSoldier(), 4, AiShooter(), 4}, true) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiNeed(AiBarracks()) end,
	function() return AiNeed(AiStables()) end,
	function() return AiResearch(AiUpgradeWeapon2()) end,
	function() return AiResearch(AiUpgradeMissile2()) end,
	function() return AiResearch(AiUpgradeEliteShooter1()) end,
	function() return AiSleep(8000) end,
	function() return AiForce(1, {AiSoldier(), 4, AiShooter(), 4, AiCavalry(), 3}, true) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiResearch(AiUpgradeArmor2()) end,
	function() return AiResearch(AiUpgradeEliteShooter2()) end,
	function() return AiUpgradeTo(AiBestCityCenter()) end,
	function() return AiNeed(AiTemple()) end,
	function() return AiResearch(AiUpgradeCavalryMage()) end,
	function() return AiSleep(8000) end,
	function() return AiForce(1, {AiSoldier(), 4, AiShooter(), 4, AiCavalry(), 3, AiCatapult(), 2}, true) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiResearch(AiCavalryMageSpell1()) end,
	function() return AiResearch(AiUpgradeEliteShooter3()) end,
	function() return AiResearch(AiCavalryMageSpell2()) end,
	function() return AiResearch(AiUpgradeCatapult1()) end,
	function() return AiResearch(AiUpgradeCatapult2()) end,
	function() return AiSleep(10000) end,
	function() return AiForce(1, {AiSoldier(), 3, AiShooter(), 3, AiCavalry(), 5, AiCatapult(), 1}, true) end,
	function() return AiWaitForce(1) end,
	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
	
	function() return AiLoop(orc_exp_03_loop_funcs, stratagus.gameData.AIState.loop_index) end,
}

function AiOrcExp03() return AiLoop(orc_exp_03_funcs, stratagus.gameData.AIState.index) end
DefineAi("orc-exp-3", "*", "orc-exp-3", AiOrcExp03) 


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