1--	Stratagus Map - Single player campaign
2
3Load("campaigns/orc-exp/levelx12o_c2.sms")
4
5Briefing(
6  title,
7  objectives,
8  "../campaigns/orc/interface/introscreen5.png",
9  "campaigns/orc-exp/levelx12o.txt",
10  {"campaigns/orc-exp/levelx12o-intro1.wav",
11   "campaigns/orc-exp/levelx12o-intro2.wav",
12   "campaigns/orc-exp/levelx12o-intro3.wav"}
13)
14
15Triggers = [[
16-- FIXME: Check if units are destroyed.
17AddTrigger(
18  function() return GetNumOpponents(GetThisPlayer()) == 0 end,
19  function() return ActionVictory() end)
20
21AddTrigger(
22  function() return GetPlayerData(GetThisPlayer(), "TotalNumUnits") == 0 end,
23  function() return ActionDefeat() end)
24]]
25
26assert(loadstring(Triggers))()
27
28--Units
29DefineAllowNormalHumanUnits("AAAAAAAAAAAAAAAA")
30DefineAllowExtraHumanUnits("FFFFFFFFFFFFFFFF")
31DefineAllowNormalOrcUnits("AAAAAAAAAAAAAAAA")
32DefineAllowExtraOrcUnits("FFFFFFFFFFFFFFFF")
33DefineAllowSpecialUnits("FFFFFFFFFFFFFFFF")
34DefineAllowHumanAlways()
35DefineAllowOrcAlways()
36
37local orc_exp_12a_loop_funcs = {
38	function() DebugPrint("Looping !\n") return false end,
39	function() return AiSleep(5000) end,
40	function() return AiForce(1, {AiSoldier(), 4, AiShooter(), 3, AiCavalry(), 2, AiCatapult(), 2}) end,
41	function() return AiWaitForce(1) end,
42	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
43	function() stratagus.gameData.AIState.loop_index[1 + AiPlayer()] = 0; return false end,
44}
45
46local orc_exp_12b_loop_funcs = {
47	function() DebugPrint("Looping !\n") return false end,
48	function() return AiSleep(3000) end,
49	function() return AiForce(1, {AiSoldier(), 5, AiShooter(), 3, AiCavalry(), 3, AiCatapult(), 1, AiMage(), 2}) end,
50	function() return AiWaitForce(1) end,
51	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
52	function() stratagus.gameData.AIState.loop_index[1 + AiPlayer()] = 0; return false end,
53}
54
55local orc_exp_12c_loop_funcs = {
56	function() DebugPrint("Looping !\n") return false end,
57	function() return AiSleep(5000) end,
58	function() return AiForce(1, {AiSoldier(), 5, AiShooter(), 4, AiCatapult(), 1, AiCavalry(), 3, AiMage(), 2}) end,
59	function() return AiWaitForce(1) end,
60	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
61	function() stratagus.gameData.AIState.loop_index[1 + AiPlayer()] = 0; return false end,
62}
63
64local orc_exp_12d_loop_funcs = {
65	function() DebugPrint("Looping !\n") return false end,
66	function() return AiSleep(5000) end,
67	function() return AiForce(3, {AiFlyer(), 3}) end,
68	function() return AiWaitForce(3) end,
69	function() DebugMessage("Attacking..."); return AiAttackWithForce(3) end,
70	function() stratagus.gameData.AIState.loop_index[1 + AiPlayer()] = 0; return false end,
71}
72
73local orc_exp_12a_funcs = {
74	function() return AiNeed(AiBarracks()) end,
75	function() return AiUpgradeTo(AiBetterCityCenter()) end,
76	function() return AiNeed(AiLumberMill()) end,
77	function() return AiNeed(AiBlacksmith()) end,
78	function() return AiResearch(AiUpgradeArmor1()) end,
79	function() return AiResearch(AiUpgradeWeapon1()) end,
80
81	function() return AiNeed(AiBarracks()) end,
82	function() return AiNeed(AiStables()) end,
83	function() return AiSet(AiWorker(), 7) end,
84	function() return AiWait(AiWorker()) end,
85
86	function() return AiForce(1, {AiSoldier(), 4, AiShooter(), 3, AiCavalry(), 2, AiCatapult(), 2}) end,
87	function() return AiWaitForce(1) end,
88	function() return AiSleep(5000) end,
89	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
90
91	function() return AiLoop(orc_exp_12a_loop_funcs, stratagus.gameData.AIState.loop_index) end,
92}
93
94local orc_exp_12b_funcs = {
95	function() return AiNeed(AiLumberMill()) end,
96	function() return AiNeed(AiBarracks()) end,
97	function() return AiSet(AiWorker(), 9) end,
98	function() return AiWait(AiWorker()) end,
99
100	function() return AiForce(1, {AiSoldier(), 3, AiShooter(), 2}) end,
101	function() return AiNeed(AiBlacksmith()) end,
102	function() return AiNeed(AiStables()) end,
103	function() return AiNeed(AiTower()) end,
104	function() return AiNeed(AiTower()) end,
105	function() return AiUpgradeTo(AiGuardTower()) end,
106	function() return AiUpgradeTo(AiGuardTower()) end,
107	function() return AiNeed(AiBarracks()) end,
108
109	function() return AiForce(1, {AiSoldier(), 5, AiShooter(), 3, AiCavalry(), 3, AiCatapult(), 1}) end,
110	function() return AiWaitForce(1) end,
111	function() return AiResearch(AiUpgradeWeapon1()) end,
112	function() return AiResearch(AiUpgradeMissile1()) end,
113	function() return AiResearch(AiUpgradeArmor1()) end,
114	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
115
116	function() return AiResearch(AiUpgradeCavalryMage()) end,
117	function() return AiResearch(AiCavalryMageSpell1()) end,
118	function() return AiResearch(AiUpgradeMissile2()) end,
119	function() return AiResearch(AiUpgradeArmor2()) end,
120	function() return AiNeed(AiMageTower()) end,
121	function() return AiResearch(AiMageSpell2()) end,
122	function() return AiResearch(AiMageSpell3()) end,
123
124	function() return AiForce(1, {AiSoldier(), 5, AiShooter(), 3, AiCavalry(), 3, AiCatapult(), 1, AiMage(), 2}) end,
125	function() return AiWaitForce(1) end,
126	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
127
128	function() return AiLoop(orc_exp_12b_loop_funcs, stratagus.gameData.AIState.loop_index) end,
129}
130
131local orc_exp_12c_funcs = {
132	function() return AiNeed(AiCityCenter()) end,
133	function() return AiNeed(AiLumberMill()) end,
134	function() return AiNeed(AiBarracks()) end,
135	function() return AiNeed(AiBlacksmith()) end,
136	function() return AiNeed(AiTower()) end,
137	function() return AiUpgradeTo(AiGuardTower()) end,
138	function() return AiNeed(AiBarracks()) end,
139	function() return AiUpgradeTo(AiBetterCityCenter()) end,
140	function() return AiNeed(AiStables()) end,
141	function() return AiResearch(AiUpgradeWeapon1()) end,
142	function() return AiResearch(AiUpgradeMissile1()) end,
143	function() return AiResearch(AiUpgradeArmor1()) end,
144	function() return AiUpgradeTo(AiBestCityCenter()) end,
145	function() return AiNeed(AiTemple()) end,
146	function() return AiResearch(AiUpgradeCavalryMage()) end,
147	function() return AiResearch(AiCavalryMageSpell1()) end,
148	function() return AiNeed(AiMageTower()) end,
149	function() return AiResearch(AiMageSpell4()) end,
150	function() return AiResearch(AiMageSpell5()) end,
151
152	function() return AiSet(AiWorker(), 8) end,
153	function() return AiWait(AiWorker()) end,
154
155	function() return AiSet(AiWorker(), 11) end,
156	function() return AiWait(AiBetterCityCenter()) end,
157	function() return AiForce(1, {AiSoldier(), 5, AiShooter(), 4, AiCatapult(), 1, AiCavalry(), 3}) end,
158	function() return AiWaitForce(1) end,
159	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
160
161	function() return AiWait(AiBestCityCenter()) end,
162	function() return AiForce(1, {AiSoldier(), 5, AiShooter(), 4, AiCatapult(), 1, AiCavalry(), 3}) end,
163	function() return AiWaitForce(1) end,
164	function() DebugMessage("Attacking..."); return AiAttackWithForce(1) end,
165
166	function() return AiLoop(orc_exp_12c_loop_funcs, stratagus.gameData.AIState.loop_index) end,
167}
168
169local orc_exp_12d_funcs = {
170	function() return AiSet(AiWorker(), 12) end,
171	function() return AiWait(AiWorker()) end,
172	function() return AiSet(AiTanker(), 3) end,
173	function() return AiNeed(AiBarracks()) end,
174	function() return AiNeed(AiBarracks()) end,
175	function() return AiNeed(AiTower()) end,
176	function() return AiUpgradeTo(AiGuardTower()) end,
177	function() return AiNeed(AiLumberMill()) end,
178	function() return AiNeed(AiBlacksmith()) end,
179	function() return AiNeed(AiStables()) end,
180	function() return AiNeed(AiHarbor()) end,
181	function() return AiNeed(AiFoundry()) end,
182	function() return AiResearch(AiUpgradeShipArmor1()) end,
183	function() return AiResearch(AiUpgradeShipCannon1()) end,
184	function() return AiResearch(AiUpgradeShipArmor2()) end,
185	function() return AiResearch(AiUpgradeShipCannon2()) end,
186	function() return AiResearch(AiUpgradeCatapult1()) end,
187	function() return AiNeed(AiMageTower()) end,
188	function() return AiNeed(AiAirport()) end,
189	function() return AiNeed(AiTemple()) end,
190	function() return AiResearch(AiUpgradeCavalryMage()) end,
191	function() return AiResearch(AiCavalryMageSpell1()) end,
192	function() return AiResearch(AiCavalryMageSpell2()) end,
193	function() return AiResearch(AiMageSpell1()) end,
194	function() return AiResearch(AiMageSpell2()) end,
195	function() return AiResearch(AiMageSpell3()) end,
196	function() return AiResearch(AiMageSpell4()) end,
197	function() return AiResearch(AiMageSpell5()) end,
198	function() return AiResearch(AiUpgradeWeapon1()) end,
199	function() return AiResearch(AiUpgradeMissile1()) end,
200	function() return AiResearch(AiUpgradeArmor1()) end,
201	function() return AiResearch(AiUpgradeWeapon2()) end,
202	function() return AiResearch(AiUpgradeMissile2()) end,
203	function() return AiResearch(AiUpgradeArmor2()) end,
204	function() return AiResearch(AiUpgradeEliteShooter()) end,
205	function() return AiResearch(AiUpgradeEliteShooter1()) end,
206	function() return AiResearch(AiUpgradeEliteShooter2()) end,
207	function() return AiResearch(AiUpgradeEliteShooter3()) end,
208
209	function() return AiForce(1, {AiDestroyer(), 3, AiBattleship(), 3, AiSubmarine(), 2}) end,
210	function() return AiForce(2, {AiShooter(), 6, AiCavalry(), 8, AiCatapult(), 2, AiMage(), 4}) end,
211
212	function() return AiForce(3, {AiFlyer(), 3}) end,
213	function() return AiWaitForce(3) end,
214	function() return AiSleep(2000) end,
215	function() DebugMessage("Attacking..."); return AiAttackWithForce(3) end,
216
217	function() return AiLoop(orc_exp_12d_loop_funcs, stratagus.gameData.AIState.loop_index) end,
218}
219
220function AiOrcExp12a() return AiLoop(orc_exp_12a_funcs, stratagus.gameData.AIState.index) end
221function AiOrcExp12b() return AiLoop(orc_exp_12b_funcs, stratagus.gameData.AIState.index) end
222function AiOrcExp12c() return AiLoop(orc_exp_12c_funcs, stratagus.gameData.AIState.index) end
223function AiOrcExp12d() return AiLoop(orc_exp_12d_funcs, stratagus.gameData.AIState.index) end
224DefineAi("orc-exp-12a", "*", "orc-exp-12a", AiOrcExp12a)
225DefineAi("orc-exp-12b", "*", "orc-exp-12b", AiOrcExp12b)
226DefineAi("orc-exp-12c", "*", "orc-exp-12c", AiOrcExp12c)
227DefineAi("orc-exp-12d", "*", "orc-exp-12d", AiOrcExp12d)
228
229Load("campaigns/orc-exp/levelx12o.sms")
230
231-- Default Spells Researched
232DefineAllow("upgrade-holy-vision", "RRRRRRRRRRRRRRRR")
233DefineAllow("upgrade-fireball", "RRRRRRRRRRRRRRRR")
234DefineAllow("upgrade-eye-of-kilrogg", "RRRRRRRRRRRRRRRR")
235DefineAllow("upgrade-death-coil", "RRRRRRRRRRRRRRRR")
236
237-- Extra Spells Begin Researched in this Mission
238DefineAllow("upgrade-bloodlust", "RRRRRRRRRRRRRRRR")
239DefineAllow("upgrade-runes", "RRRRRRRRRRRRRRRR")
240DefineAllow("upgrade-raise-dead", "RRRRRRRRRRRRRRRR")
241DefineAllow("upgrade-whirlwind", "RRRRRRRRRRRRRRRR")
242DefineAllow("upgrade-haste", "RRRRRRRRRRRRRRRR")
243DefineAllow("upgrade-unholy-armor", "RRRRRRRRRRRRRRRR")
244DefineAllow("upgrade-death-and-decay", "RRRRRRRRRRRRRRRR")