|
1 HedgewarsScriptLoad("/Scripts/Locale.lua") |
|
2 HedgewarsScriptLoad("/Scripts/Animate.lua") |
|
3 |
|
4 --///////////////////////////////CONSTANTS/////////////////////////// |
|
5 |
|
6 choiceAccepted = 1 |
|
7 choiceRefused = 2 |
|
8 choiceAttacked = 3 |
|
9 |
|
10 endStage = 1 |
|
11 |
|
12 cannibalNum = 8 |
|
13 cannibalNames = {loc("John"), loc("Flesh for Brainz"), loc("Eye Chewer"), loc("Torn Muscle"), |
|
14 loc("Nom-Nom"), loc("Vedgies"), loc("Brain Blower"), loc("Gorkij")} |
|
15 cannibalPos = {{2471, 1174}, {939, 1019}, {1953, 902}, {3055, 1041}, |
|
16 {1121, 729}, {1150, 718}, {1149, 680}, {1161, 773}} |
|
17 |
|
18 startLeaksPosDuo = {3572, 1426} |
|
19 startEventXDuo = 3300 |
|
20 startDensePosDuo = {3454, 1471} |
|
21 startCyborgPosDuo = {3202, 1307} |
|
22 midDensePosDuo = {1464, 1410} |
|
23 midCyborgPosDuo = {1264, 1390} |
|
24 |
|
25 --///////////////////////////////VARIABLES/////////////////////////// |
|
26 |
|
27 m2Choice = 0 |
|
28 m2DenseDead = 0 |
|
29 m2RamonDead = 0 |
|
30 m2SpikyDead = 0 |
|
31 |
|
32 TurnsLeft = 0 |
|
33 stage = 0 |
|
34 |
|
35 --cyborgHidden = false |
|
36 --princessHidden = false |
|
37 blowTaken = false |
|
38 fireTaken = false |
|
39 gravityTaken = false |
|
40 sniperTaken = false |
|
41 girderTaken = false |
|
42 girder1Taken = false |
|
43 girder2Taken = false |
|
44 leaksDead = false |
|
45 denseDead = false |
|
46 princessDead = false |
|
47 cyborgDead = false |
|
48 cannibalDead = {} |
|
49 hedgeHidden = {} |
|
50 |
|
51 startAnim = {} |
|
52 startAnimAD = {} |
|
53 startAnimAL = {} |
|
54 startAnimRL = {} |
|
55 |
|
56 pastFlowerAnimAL = {} |
|
57 pastFlowerAnimRL = {} |
|
58 pastFlowerAnim = {} |
|
59 |
|
60 outPitAnimAL = {} |
|
61 outPitAnimRL = {} |
|
62 outPitAnim = {} |
|
63 |
|
64 midAnim = {} |
|
65 midAnimAD = {} |
|
66 |
|
67 failAnim = {} |
|
68 failAnimAD = {} |
|
69 |
|
70 endAnim = {} |
|
71 endAnimAD = {} |
|
72 endAnimAL = {} |
|
73 endAnimRL = {} |
|
74 |
|
75 endFailAnim = {} |
|
76 endFailAnimAD = {} |
|
77 |
|
78 winAnim = {} |
|
79 winAnimAD = {} |
|
80 |
|
81 --/////////////////////////Animation Functions/////////////////////// |
|
82 function AfterMidFailAnim() |
|
83 ParseCommand("teamgone " .. loc("Natives")) |
|
84 TurnTimeLeft = 0 |
|
85 end |
|
86 |
|
87 function AfterMidAnimAlone() |
|
88 SetupCourse() |
|
89 for i = 5, 8 do |
|
90 RestoreHedge(cannibals[i]) |
|
91 AnimSetGearPosition(cannibals[i], unpack(cannibalPos[i])) |
|
92 end |
|
93 |
|
94 AddAmmo(cannibals[5], amDEagle, 0) |
|
95 |
|
96 AddEvent(CheckGirderTaken, {}, DoGirderTaken, {}, 0) |
|
97 AddEvent(CheckOnFirstGirder, {}, DoOnFirstGirder, {}, 0) |
|
98 AddEvent(CheckTookSniper, {}, DoTookSniper, {}, 0) |
|
99 AddEvent(CheckFailedCourse, {}, DoFailedCourse, {}, 0) |
|
100 SetGearMessage(leaks, 0) |
|
101 TurnsLeft = 12 |
|
102 TurnTimeLeft = TurnTime |
|
103 ShowMission(loc("The Journey Back"), loc("Collateral Damage"), loc("Save the princess by collecting the crate in under 12 turns!"), 0, 6000) |
|
104 -----------------------///////////////------------ |
|
105 --AnimSetGearPosition(leaks, 417, 1800) |
|
106 end |
|
107 |
|
108 function SkipEndAnimAlone() |
|
109 RestoreHedge(cyborg) |
|
110 RestoreHedge(princess) |
|
111 AnimSetGearPosition(cyborg, 437, 1700) |
|
112 AnimSetGearPosition(princess, 519, 1722) |
|
113 end |
|
114 |
|
115 function SkipEndAnimDuo() |
|
116 RestoreHedge(cyborg) |
|
117 RestoreHedge(princess) |
|
118 if princessHidden then |
|
119 RestoreHog(princess) |
|
120 princessHidden = false |
|
121 end |
|
122 AnimSetGearPosition(cyborg, 437, 1700) |
|
123 AnimSetGearPosition(princess, 519, 1722) |
|
124 AnimSetGearPosition(leaks, 763, 1760) |
|
125 AnimSetGearPosition(dense, 835, 1519) |
|
126 HogTurnLeft(leaks, true) |
|
127 HogTurnLeft(dense, true) |
|
128 end |
|
129 |
|
130 function AfterEndAnimAlone() |
|
131 stage = endStage |
|
132 SwitchHog(leaks) |
|
133 SetGearMessage(leaks, 0) |
|
134 TurnTimeLeft = -1 |
|
135 ShowMission(loc("The Journey Back"), loc("Collateral Damage II"), loc("Save Fell From Heaven!"), 1, 4000) |
|
136 AddEvent(CheckLost, {}, DoLost, {}, 0) |
|
137 AddEvent(CheckWon, {}, DoWon, {}, 0) |
|
138 RemoveEventFunc(CheckFailedCourse) |
|
139 end |
|
140 |
|
141 function AfterEndAnimDuo() |
|
142 stage = endStage |
|
143 SwitchHog(leaks) |
|
144 SetGearMessage(leaks, 0) |
|
145 SetGearMessage(dense, 0) |
|
146 TurnTimeLeft = -1 |
|
147 ShowMission(loc("The Journey Back"), loc("Collateral Damage II"), loc("Save Fell From Heaven!"), 1, 4000) |
|
148 AddEvent(CheckLost, {}, DoLost, {}, 0) |
|
149 AddEvent(CheckWon, {}, DoWon, {}, 0) |
|
150 end |
|
151 |
|
152 function SkipMidAnimAlone() |
|
153 AnimSetGearPosition(leaks, 2656, 1842) |
|
154 AnimSwitchHog(leaks) |
|
155 SetInputMask(0xFFFFFFFF) |
|
156 AnimWait(dense, 1) |
|
157 AddFunction({func = HideHedge, args = {princess}}) |
|
158 AddFunction({func = HideHedge, args = {cyborg}}) |
|
159 end |
|
160 |
|
161 function AfterStartAnim() |
|
162 SetGearMessage(leaks, 0) |
|
163 TurnTimeLeft = TurnTime |
|
164 local goal = loc("Get the crate on the other side of the island!|") |
|
165 local hint = loc("Hint: you might want to stay out of sight and take all the crates...|") |
|
166 local stuck = loc("If you get stuck, use your Desert Eagle or restart the mission!|") |
|
167 local conds = loc("Leaks A Lot must survive!") |
|
168 if m2DenseDead == 0 then |
|
169 conds = loc("Your hogs must survive!") |
|
170 end |
|
171 ShowMission(loc("The Journey Back"), loc("Adventurous"), goal .. hint .. stuck .. conds, 0, 7000) |
|
172 end |
|
173 |
|
174 function SkipStartAnim() |
|
175 AnimSwitchHog(leaks) |
|
176 end |
|
177 |
|
178 function PlaceCratesDuo() |
|
179 SpawnAmmoCrate(3090, 827, amBaseballBat) |
|
180 girderCrate1 = SpawnUtilityCrate(2466, 1814, amGirder) |
|
181 girderCrate2 = SpawnUtilityCrate(2630, 1278, amGirder) |
|
182 SpawnUtilityCrate(2422, 1810, amParachute) |
|
183 SpawnUtilityCrate(3157, 1009, amLowGravity) |
|
184 sniperCrate = SpawnAmmoCrate(784, 1715, amSniperRifle) |
|
185 end |
|
186 |
|
187 function PlaceMinesDuo() |
|
188 SetTimer(AddGear(2920, 1448, gtMine, 0, 0, 0, 0), 5000) |
|
189 SetTimer(AddGear(2985, 1338, gtMine, 0, 0, 0, 0), 5000) |
|
190 SetTimer(AddGear(3005, 1302, gtMine, 0, 0, 0, 0), 5000) |
|
191 SetTimer(AddGear(3030, 1270, gtMine, 0, 0, 0, 0), 5000) |
|
192 SetTimer(AddGear(3046, 1257, gtMine, 0, 0, 0, 0), 5000) |
|
193 SetTimer(AddGear(2954, 1400, gtMine, 0, 0, 0, 0), 5000) |
|
194 SetTimer(AddGear(2967, 1385, gtMine, 0, 0, 0, 0), 5000) |
|
195 SetTimer(AddGear(2849, 1449, gtMine, 0, 0, 0, 0), 5000) |
|
196 SetTimer(AddGear(2811, 1436, gtMine, 0, 0, 0, 0), 5000) |
|
197 SetTimer(AddGear(2773, 1411, gtMine, 0, 0, 0, 0), 5000) |
|
198 SetTimer(AddGear(2732, 1390, gtMine, 0, 0, 0, 0), 5000) |
|
199 SetTimer(AddGear(2700, 1362, gtMine, 0, 0, 0, 0), 5000) |
|
200 SetTimer(AddGear(2642, 1321, gtMine, 0, 0, 0, 0), 5000) |
|
201 SetTimer(AddGear(2172, 1417, gtMine, 0, 0, 0, 0), 5000) |
|
202 SetTimer(AddGear(2190, 1363, gtMine, 0, 0, 0, 0), 5000) |
|
203 SetTimer(AddGear(2219, 1332, gtMine, 0, 0, 0, 0), 5000) |
|
204 SetTimer(AddGear(1201, 1207, gtMine, 0, 0, 0, 0), 5000) |
|
205 SetTimer(AddGear(1247, 1205, gtMine, 0, 0, 0, 0), 5000) |
|
206 SetTimer(AddGear(1295, 1212, gtMine, 0, 0, 0, 0), 5000) |
|
207 SetTimer(AddGear(1356, 1209, gtMine, 0, 0, 0, 0), 5000) |
|
208 SetTimer(AddGear(1416, 1201, gtMine, 0, 0, 0, 0), 5000) |
|
209 SetTimer(AddGear(1466, 1201, gtMine, 0, 0, 0, 0), 5000) |
|
210 SetTimer(AddGear(1678, 1198, gtMine, 0, 0, 0, 0), 5000) |
|
211 SetTimer(AddGear(1738, 1198, gtMine, 0, 0, 0, 0), 5000) |
|
212 SetTimer(AddGear(1796, 1198, gtMine, 0, 0, 0, 0), 5000) |
|
213 SetTimer(AddGear(1637, 1217, gtMine, 0, 0, 0, 0), 5000) |
|
214 SetTimer(AddGear(1519, 1213, gtMine, 0, 0, 0, 0), 5000) |
|
215 end |
|
216 |
|
217 function AfterPastFlowerAnim() |
|
218 PlaceMinesDuo() |
|
219 AddEvent(CheckDensePit, {}, DoDensePit, {}, 0) |
|
220 AddEvent(CheckTookGirder1, {}, DoTookGirder1, {}, 0) |
|
221 AddEvent(CheckTookGirder2, {}, DoTookGirder2, {}, 0) |
|
222 SetGearMessage(leaks, 0) |
|
223 SetGearMessage(dense, 0) |
|
224 TurnTimeLeft = 0 |
|
225 ShowMission(loc("The Journey Back"), loc("The Savior"), loc("Get Dense Cloud out of the pit!"), 1, 5000) |
|
226 end |
|
227 |
|
228 function SkipPastFlowerAnim() |
|
229 AnimSetGearPosition(dense, 2656, 1842) |
|
230 AnimSwitchHog(dense) |
|
231 AnimWait(dense, 1) |
|
232 AddFunction({func = HideHedge, args = {cyborg}}) |
|
233 end |
|
234 |
|
235 function AfterOutPitAnim() |
|
236 SetupCourseDuo() |
|
237 RestoreHedge(cannibals[5]) |
|
238 AddAmmo(cannibals[5], amDEagle, 0) |
|
239 HideHedge(cannibals[5]) |
|
240 AddEvent(CheckTookFire, {}, DoTookFire, {}, 0) |
|
241 SetGearMessage(leaks, 0) |
|
242 SetGearMessage(dense, 0) |
|
243 TurnTimeLeft = 0 |
|
244 ShowMission(loc("The Journey Back"), loc("They never learn"), loc("Free Dense Cloud and continue the mission!"), 1, 5000) |
|
245 end |
|
246 |
|
247 function SkipOutPitAnim() |
|
248 AnimSetGearPosition(dense, unpack(midDensePosDuo)) |
|
249 AnimSwitchHog(dense) |
|
250 AnimWait(dense, 1) |
|
251 AddFunction({func = HideHedge, args = {cyborg}}) |
|
252 end |
|
253 |
|
254 function RestoreCyborg(x, y, xx, yy) |
|
255 RestoreHedge(cyborg) |
|
256 RestoreHedge(princess) |
|
257 AnimOutOfNowhere(cyborg, x, y) |
|
258 AnimOutOfNowhere(princess, xx, yy) |
|
259 HogTurnLeft(princess, false) |
|
260 return true |
|
261 end |
|
262 |
|
263 function RestoreCyborgOnly(x, y) |
|
264 RestoreHedge(cyborg) |
|
265 SetState(cyborg, 0) |
|
266 AnimOutOfNowhere(cyborg, x, y) |
|
267 return true |
|
268 end |
|
269 |
|
270 function TargetPrincess() |
|
271 ParseCommand("setweap " .. string.char(amDEagle)) |
|
272 SetGearMessage(cyborg, gmUp) |
|
273 return true |
|
274 end |
|
275 |
|
276 function HideCyborg() |
|
277 HideHedge(cyborg) |
|
278 HideHedge(princess) |
|
279 end |
|
280 |
|
281 function HideCyborgOnly() |
|
282 HideHedge(cyborg) |
|
283 end |
|
284 |
|
285 function SetupKillRoom() |
|
286 PlaceGirder(2342, 1814, 2) |
|
287 PlaceGirder(2294, 1783, 0) |
|
288 PlaceGirder(2245, 1814, 2) |
|
289 end |
|
290 |
|
291 function SetupCourseDuo() |
|
292 PlaceGirder(1083, 1152, 6) |
|
293 PlaceGirder(1087, 1150, 6) |
|
294 PlaceGirder(1133, 1155, 0) |
|
295 PlaceGirder(1135, 1152, 0) |
|
296 PlaceGirder(1135, 1078, 0) |
|
297 PlaceGirder(1087, 1016, 2) |
|
298 PlaceGirder(1018, 921, 5) |
|
299 PlaceGirder(1016, 921, 5) |
|
300 PlaceGirder(962, 782, 6) |
|
301 PlaceGirder(962, 662, 2) |
|
302 PlaceGirder(962, 661, 2) |
|
303 PlaceGirder(962, 650, 2) |
|
304 PlaceGirder(962, 630, 2) |
|
305 PlaceGirder(1033, 649, 0) |
|
306 PlaceGirder(952, 650, 0) |
|
307 |
|
308 fireCrate = SpawnAmmoCrate(1846, 1100, amFirePunch) |
|
309 SpawnUtilityCrate(1900, 1100, amPickHammer) |
|
310 SpawnAmmoCrate(950, 674, amDynamite) |
|
311 SpawnUtilityCrate(994, 825, amRope) |
|
312 SpawnUtilityCrate(570, 1357, amLowGravity) |
|
313 end |
|
314 |
|
315 function DumpMines() |
|
316 SetTimer(AddGear(2261, 1835, gtMine, 0, 0, 0, 0), 5000) |
|
317 SetTimer(AddGear(2280, 1831, gtMine, 0, 0, 0, 0), 5000) |
|
318 SetTimer(AddGear(2272, 1809, gtMine, 0, 0, 0, 0), 5000) |
|
319 SetTimer(AddGear(2290, 1815, gtMine, 0, 0, 0, 0), 5000) |
|
320 SetTimer(AddGear(2278, 1815, gtMine, 0, 0, 0, 0), 5000) |
|
321 SetTimer(AddGear(2307, 1811, gtMine, 0, 0, 0, 0), 5000) |
|
322 SetTimer(AddGear(2286, 1820, gtMine, 0, 0, 0, 0), 5000) |
|
323 SetTimer(AddGear(2309, 1813, gtMine, 0, 0, 0, 0), 5000) |
|
324 SetTimer(AddGear(2303, 1822, gtMine, 0, 0, 0, 0), 5000) |
|
325 SetTimer(AddGear(2317, 1827, gtMine, 0, 0, 0, 0), 5000) |
|
326 SetTimer(AddGear(2312, 1816, gtMine, 0, 0, 0, 0), 5000) |
|
327 SetTimer(AddGear(2316, 1812, gtMine, 0, 0, 0, 0), 5000) |
|
328 SetTimer(AddGear(2307, 1802, gtMine, 0, 0, 0, 0), 5000) |
|
329 SetTimer(AddGear(2276, 1818, gtMine, 0, 0, 0, 0), 5000) |
|
330 SetTimer(AddGear(2284, 1816, gtMine, 0, 0, 0, 0), 5000) |
|
331 SetTimer(AddGear(2292, 1811, gtMine, 0, 0, 0, 0), 5000) |
|
332 SetTimer(AddGear(2295, 1814, gtMine, 0, 0, 0, 0), 5000) |
|
333 SetTimer(AddGear(2306, 1811, gtMine, 0, 0, 0, 0), 5000) |
|
334 SetTimer(AddGear(2292, 1815, gtMine, 0, 0, 0, 0), 5000) |
|
335 SetTimer(AddGear(2314, 1815, gtMine, 0, 0, 0, 0), 5000) |
|
336 SetTimer(AddGear(2286, 1813, gtMine, 0, 0, 0, 0), 5000) |
|
337 SetTimer(AddGear(2275, 1813, gtMine, 0, 0, 0, 0), 5000) |
|
338 SetTimer(AddGear(2269, 1814, gtMine, 0, 0, 0, 0), 5000) |
|
339 SetTimer(AddGear(2273, 1812, gtMine, 0, 0, 0, 0), 5000) |
|
340 SetTimer(AddGear(2300, 1808, gtMine, 0, 0, 0, 0), 5000) |
|
341 SetTimer(AddGear(2322, 1812, gtMine, 0, 0, 0, 0), 5000) |
|
342 SetTimer(AddGear(2323, 1813, gtMine, 0, 0, 0, 0), 5000) |
|
343 SetTimer(AddGear(2311, 1811, gtMine, 0, 0, 0, 0), 5000) |
|
344 SetTimer(AddGear(2303, 1809, gtMine, 0, 0, 0, 0), 5000) |
|
345 SetTimer(AddGear(2287, 1808, gtMine, 0, 0, 0, 0), 5000) |
|
346 SetTimer(AddGear(2282, 1808, gtMine, 0, 0, 0, 0), 5000) |
|
347 SetTimer(AddGear(2277, 1809, gtMine, 0, 0, 0, 0), 5000) |
|
348 SetTimer(AddGear(2296, 1809, gtMine, 0, 0, 0, 0), 5000) |
|
349 SetTimer(AddGear(2314, 1818, gtMine, 0, 0, 0, 0), 5000) |
|
350 end |
|
351 |
|
352 function SetupAnimRefusedDied() |
|
353 SetupAnimAcceptedDied() |
|
354 table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I just wonder where Ramon and Spiky disappeared..."), SAY_THINK, 6000}}) |
|
355 end |
|
356 |
|
357 function SetupAnimAttacked() |
|
358 SetupAnimAcceptedDied() |
|
359 startAnim = {} |
|
360 table.insert(startAnim, {func = AnimWait, args = {leaks, 3000}}) |
|
361 table.insert(startAnim, {func = AnimTurn, args = {leaks, "Left"}}) |
|
362 table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I wonder where Dense Cloud is..."), SAY_THINK, 4000}}) |
|
363 table.insert(startAnim, {func = AnimSay, args = {leaks, loc("He must be in the village already."), SAY_THINK, 4000}}) |
|
364 table.insert(startAnim, {func = AnimSay, args = {leaks, loc("I'd better get going myself."), SAY_THINK, 4000}}) |
|
365 |
|
366 midAnim = {} |
|
367 table.insert(midAnim, {func = AnimWait, args = {leaks, 500}}) |
|
368 table.insert(midAnim, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {1300, 1200, 1390, 1200}}}) |
|
369 table.insert(midAnim, {func = AnimSwitchHog, args = {cyborg}}) |
|
370 table.insert(midAnim, {func = AnimCustomFunction, args = {cyborg, TargetPrincess, {}}}) |
|
371 table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("Welcome, Leaks A Lot!"), SAY_SAY, 3000}}) |
|
372 table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("I want to play a game..."), SAY_SAY, 3000}}) |
|
373 table.insert(midAnim, {func = AnimSay, args = {princess, loc("Help me, please!!!"), SAY_SHOUT, 3000}}) |
|
374 table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("If you can get that crate fast enough, your beloved \"princess\" may go free."), SAY_SAY, 7000}}) |
|
375 table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("However, if you fail to do so, she dies a most violent death! Muahahaha!"), SAY_SAY, 8000}}) |
|
376 table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("Good luck...or else!"), SAY_SAY, 4000}}) |
|
377 table.insert(midAnim, {func = AnimTeleportGear, args = {leaks, 2656, 1842}}) |
|
378 table.insert(midAnim, {func = AnimCustomFunction, args = {cyborg, HideCyborg, {}}, swh = false}) |
|
379 table.insert(midAnim, {func = AnimSay, args = {leaks, loc("Hey! This is cheating!"), SAY_SHOUT, 4000}}) |
|
380 AddSkipFunction(midAnim, SkipMidAnimAlone, {}) |
|
381 end |
|
382 |
|
383 function SetupAnimAcceptedDied() |
|
384 table.insert(startAnimAD, {func = AnimWait, args = {leaks, 3000}}) |
|
385 table.insert(startAnimAD, {func = AnimTurn, args = {leaks, "Left"}}) |
|
386 table.insert(startAnimAD, {func = AnimSay, args = {leaks, loc("I need to get to the other side of this island, fast!"), SAY_THINK, 5000}}) |
|
387 table.insert(startAnimAD, {func = AnimSay, args = {leaks, loc("With Dense Cloud on the land of shadows, I'm the village's only hope..."), SAY_THINK, 7000}}) |
|
388 |
|
389 table.insert(midAnimAD, {func = AnimWait, args = {leaks, 500}}) |
|
390 table.insert(midAnimAD, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {1300, 1200, 1390, 1200}}}) |
|
391 table.insert(midAnimAD, {func = AnimSwitchHog, args = {cyborg}}) |
|
392 table.insert(midAnimAD, {func = AnimCustomFunction, args = {cyborg, TargetPrincess, {}}}) |
|
393 table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("Welcome, Leaks A Lot!"), SAY_SAY, 3000}}) |
|
394 table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("I want to play a game..."), SAY_SAY, 3000}}) |
|
395 table.insert(midAnimAD, {func = AnimSay, args = {princess, loc("Help me, please!!!"), SAY_SHOUT, 3000}}) |
|
396 table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("If you can get that crate fast enough, your beloved \"princess\" may go free."), SAY_SAY, 7000}}) |
|
397 table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("However, if you fail to do so, she dies a most violent death, just like your friend! Muahahaha!"), SAY_SAY, 8000}}) |
|
398 table.insert(midAnimAD, {func = AnimSay, args = {cyborg, loc("Good luck...or else!"), SAY_SAY, 4000}}) |
|
399 table.insert(midAnimAD, {func = AnimTeleportGear, args = {leaks, 2656, 1842}}) |
|
400 table.insert(midAnimAD, {func = AnimCustomFunction, args = {cyborg, HideCyborg, {}}, swh = false}) |
|
401 table.insert(midAnimAD, {func = AnimSay, args = {leaks, loc("Hey! This is cheating!"), SAY_SHOUT, 4000}}) |
|
402 AddSkipFunction(midAnimAD, SkipMidAnimAlone, {}) |
|
403 |
|
404 table.insert(failAnimAD, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {2299, 1687, 2294, 1841}}}) |
|
405 table.insert(failAnimAD, {func = AnimTeleportGear, args = {leaks, 2090, 1841}}) |
|
406 table.insert(failAnimAD, {func = AnimCustomFunction, swh = false, args = {cyborg, SetupKillRoom, {}}}) |
|
407 table.insert(failAnimAD, {func = AnimTurn, swh = false, args = {cyborg, "Left"}}) |
|
408 table.insert(failAnimAD, {func = AnimTurn, swh = false, args = {princess, "Left"}}) |
|
409 table.insert(failAnimAD, {func = AnimTurn, swh = false, args = {leaks, "Right"}}) |
|
410 table.insert(failAnimAD, {func = AnimWait, args = {cyborg, 1000}}) |
|
411 table.insert(failAnimAD, {func = AnimSay, args = {cyborg, loc("You have failed to complete your task, young one!"), SAY_SAY, 6000}}) |
|
412 table.insert(failAnimAD, {func = AnimSay, args = {cyborg, loc("It's time you learned that your actions have consequences!"), SAY_SAY, 7000}}) |
|
413 table.insert(failAnimAD, {func = AnimSay, args = {princess, loc("No! Please, help me!"), SAY_SAY, 4000}}) |
|
414 table.insert(failAnimAD, {func = AnimSwitchHog, args = {cyborg}}) |
|
415 table.insert(failAnimAD, {func = AnimCustomFunction, args = {cyborg, DumpMines, {}}}) |
|
416 table.insert(failAnimAD, {func = AnimCustomFunction, args = {cyborg, KillPrincess, {}}}) |
|
417 table.insert(failAnimAD, {func = AnimWait, args = {cyborg, 12000}}) |
|
418 table.insert(failAnimAD, {func = AnimSay, args = {leaks, loc("No! What have I done?! What have YOU done?!"), SAY_SHOUT, 6000}}) |
|
419 |
|
420 table.insert(endAnimAD, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {437, 1700, 519, 1722}}}) |
|
421 table.insert(endAnimAD, {func = AnimTurn, swh = false, args = {cyborg, "Right"}}) |
|
422 table.insert(endAnimAD, {func = AnimTurn, swh = false, args = {princess, "Right"}}) |
|
423 table.insert(endAnimAD, {func = AnimSay, args = {princess, loc("Help me, Leaks!"), SAY_SHOUT, 3000}}) |
|
424 table.insert(endAnimAD, {func = AnimSay, args = {leaks, loc("But you said you'd let her go!"), SAY_SHOUT, 5000}}) |
|
425 table.insert(endAnimAD, {func = AnimSay, args = {cyborg, loc("And you believed me? Oh, god, that's cute!"), SAY_SHOUT, 7000}}) |
|
426 table.insert(endAnimAD, {func = AnimSay, args = {leaks, loc("I won't let you kill her!"), SAY_SHOUT, 4000}}) |
|
427 AddSkipFunction(endAnimAD, SkipEndAnimAlone, {}) |
|
428 |
|
429 table.insert(endFailAnim, {func = AnimCaption, args = {leaks, loc("Leaks A Lot, depressed for killing his loved one, failed to save the village..."), 3000}}) |
|
430 |
|
431 table.insert(winAnimAD, {func = AnimCustomFunction, args = {princess, CondNeedToTurn, {leaks, princess}}}) |
|
432 table.insert(winAnimAD, {func = AnimSay, args = {princess, loc("Thank you, oh, thank you, Leaks A Lot!"), SAY_SAY, 5000}}) |
|
433 table.insert(winAnimAD, {func = AnimSay, args = {princess, loc("How can I ever repay you for saving my life?"), SAY_SAY, 6000}}) |
|
434 table.insert(winAnimAD, {func = AnimSay, args = {leaks, loc("There's nothing more satisfying for me than seeing you share your beauty with the world every morning, my princess!"), SAY_SAY, 10000}}) |
|
435 table.insert(winAnimAD, {func = AnimSay, args = {leaks, loc("Let's go home!"), SAY_SAY, 3000}}) |
|
436 table.insert(winAnimAD, {func = AnimCaption, args = {leaks, loc("And so they discovered that cyborgs weren't invulnerable..."), 2000}}) |
|
437 |
|
438 startAnim = startAnimAD |
|
439 midAnim = midAnimAD |
|
440 failAnim = failAnimAD |
|
441 endAnim = endAnimAD |
|
442 endFailAnim = endFailAnimAD |
|
443 winAnim = winAnimAD |
|
444 end |
|
445 |
|
446 function SetupAnimAcceptedLived() |
|
447 table.insert(startAnimAL, {func = AnimWait, args = {leaks, 3000}}) |
|
448 table.insert(startAnimAL, {func = AnimCustomFunction, args = {dense, CondNeedToTurn, {leaks, dense}}}) |
|
449 table.insert(startAnimAL, {func = AnimSay, args = {leaks, loc("All right, we just need to get to the other side of the island!"), SAY_SAY, 8000}}) |
|
450 table.insert(startAnimAL, {func = AnimSay, args = {dense, loc("We have no time to waste..."), SAY_SAY, 4000}}) |
|
451 table.insert(startAnimAL, {func = AnimSwitchHog, args = {leaks}}) |
|
452 AddSkipFunction(startAnimAL, SkipStartAnim, {}) |
|
453 |
|
454 table.insert(pastFlowerAnimAL, {func = AnimCustomFunction, args = {dense, RestoreCyborgOnly, {unpack(startCyborgPosDuo)}}, swh = false}) |
|
455 table.insert(pastFlowerAnimAL, {func = AnimTurn, args = {cyborg, "Right"}}) |
|
456 table.insert(pastFlowerAnimAL, {func = AnimSay, args = {cyborg, loc("Well, well! Isn't that the cutest thing you've ever seen?"), SAY_SAY, 7000}}) |
|
457 table.insert(pastFlowerAnimAL, {func = AnimSay, args = {cyborg, loc("Two little hogs cooperating, getting past obstacles..."), SAY_SAY, 7000}}) |
|
458 table.insert(pastFlowerAnimAL, {func = AnimSay, args = {cyborg, loc("Let me test your skills a little, will you?"), SAY_SAY, 6000}}) |
|
459 table.insert(pastFlowerAnimAL, {func = AnimTeleportGear, args = {cyborg, 2456, 1842}}) |
|
460 table.insert(pastFlowerAnimAL, {func = AnimTeleportGear, args = {dense, 2656, 1842}}) |
|
461 table.insert(pastFlowerAnimAL, {func = AnimCustomFunction, args = {dense, CondNeedToTurn, {cyborg, dense}}}) |
|
462 table.insert(pastFlowerAnimAL, {func = AnimSay, args = {dense, loc("Why are you doing this?"), SAY_SAY, 4000}}) |
|
463 table.insert(pastFlowerAnimAL, {func = AnimSay, args = {cyborg, loc("To help you, of course!"), SAY_SAY, 4000}}) |
|
464 table.insert(pastFlowerAnimAL, {func = AnimSwitchHog, args = {dense}}) |
|
465 table.insert(pastFlowerAnimAL, {func = AnimDisappear, swh = false, args = {cyborg, 3781, 1583}}) |
|
466 table.insert(pastFlowerAnimAL, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborgOnly, {}}}) |
|
467 AddSkipFunction(pastFlowerAnimAL, SkipPastFlowerAnim, {}) |
|
468 |
|
469 table.insert(outPitAnimAL, {func = AnimCustomFunction, args = {dense, RestoreCyborgOnly, {unpack(midCyborgPosDuo)}}, swh = false}) |
|
470 table.insert(outPitAnimAL, {func = AnimTurn, args = {cyborg, "Right"}}) |
|
471 table.insert(outPitAnimAL, {func = AnimTeleportGear, args = {dense, unpack(midDensePosDuo)}}) |
|
472 table.insert(outPitAnimAL, {func = AnimTurn, args = {dense, "Left"}}) |
|
473 table.insert(outPitAnimAL, {func = AnimSay, args = {dense, loc("OH, COME ON!"), SAY_SHOUT, 3000}}) |
|
474 table.insert(outPitAnimAL, {func = AnimSay, args = {cyborg, loc("Let's see what your comrade does now!"), SAY_SAY, 5000}}) |
|
475 table.insert(outPitAnimAL, {func = AnimSwitchHog, args = {dense}}) |
|
476 table.insert(outPitAnimAL, {func = AnimDisappear, swh = false, args = {cyborg, 3781, 1583}}) |
|
477 table.insert(outPitAnimAL, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborgOnly, {}}}) |
|
478 AddSkipFunction(outPitAnimAL, SkipOutPitAnim, {}) |
|
479 |
|
480 table.insert(endAnim, {func = AnimCustomFunction, swh = false, args = {leaks, RestoreCyborg, {437, 1700, 519, 1722}}}) |
|
481 table.insert(endAnim, {func = AnimTeleportGear, args = {leaks, 763, 1760}}) |
|
482 table.insert(endAnim, {func = AnimTeleportGear, args = {dense, 835, 1519}}) |
|
483 table.insert(endAnim, {func = AnimTurn, swh = false, args = {leaks, "Left"}}) |
|
484 table.insert(endAnim, {func = AnimTurn, swh = false, args = {dense, "Left"}}) |
|
485 table.insert(endAnim, {func = AnimTurn, swh = false, args = {cyborg, "Right"}}) |
|
486 table.insert(endAnim, {func = AnimTurn, swh = false, args = {princess, "Right"}}) |
|
487 table.insert(endAnim, {func = AnimSay, args = {princess, loc("Help me, please!"), SAY_SHOUT, 3000}}) |
|
488 table.insert(endAnim, {func = AnimSay, args = {leaks, loc("What are you doing? Let her go!"), SAY_SHOUT, 5000}}) |
|
489 table.insert(endAnim, {func = AnimSay, args = {cyborg, loc("Yeah? Watcha gonna do? Cry?"), SAY_SHOUT, 5000}}) |
|
490 table.insert(endAnim, {func = AnimSay, args = {leaks, loc("We won't let you hurt her!"), SAY_SHOUT, 4000}}) |
|
491 AddSkipFunction(endAnim, SkipEndAnimDuo, {}) |
|
492 |
|
493 table.insert(endFailAnim, {func = AnimCaption, args = {leaks, loc("Leaks A Lot, depressed for killing his loved one, failed to save the village..."), 3000}}) |
|
494 |
|
495 table.insert(winAnim, {func = AnimCustomFunction, args = {princess, CondNeedToTurn, {leaks, princess}}}) |
|
496 table.insert(winAnim, {func = AnimSay, args = {princess, loc("Thank you, oh, thank you, my heroes!"), SAY_SAY, 5000}}) |
|
497 table.insert(winAnim, {func = AnimSay, args = {princess, loc("How can I ever repay you for saving my life?"), SAY_SAY, 6000}}) |
|
498 table.insert(winAnim, {func = AnimSay, args = {leaks, loc("There's nothing more satisfying to us than seeing you share your beauty..."), SAY_SAY, 7000}}) |
|
499 table.insert(winAnim, {func = AnimSay, args = {leaks, loc("... share your beauty with the world every morning, my princess!"), SAY_SAY, 7000}}) |
|
500 table.insert(winAnim, {func = AnimSay, args = {leaks, loc("Let's go home!"), SAY_SAY, 3000}}) |
|
501 table.insert(winAnim, {func = AnimCaption, args = {leaks, loc("And so they discovered that cyborgs weren't invulnerable..."), 2000}}) |
|
502 |
|
503 startAnim = startAnimAL |
|
504 pastFlowerAnim = pastFlowerAnimAL |
|
505 outPitAnim = outPitAnimAL |
|
506 end |
|
507 |
|
508 function SetupAnimRefusedLived() |
|
509 table.insert(startAnimRL, {func = AnimWait, args = {leaks, 3000}}) |
|
510 table.insert(startAnimRL, {func = AnimCustomFunction, args = {dense, CondNeedToTurn, {leaks, dense}}}) |
|
511 table.insert(startAnimRL, {func = AnimSay, args = {leaks, loc("All right, we just need to get to the other side of the island!"), SAY_SAY, 7000}}) |
|
512 table.insert(startAnimRL, {func = AnimSay, args = {dense, loc("Dude, can you see Ramon and Spiky?"), SAY_SAY, 5000}}) |
|
513 table.insert(startAnimRL, {func = AnimSay, args = {leaks, loc("No...I wonder where they disappeared?!"), SAY_SAY, 5000}}) |
|
514 AddSkipFunction(startAnimRL, SkipStartAnim, {}) |
|
515 |
|
516 table.insert(pastFlowerAnimRL, {func = AnimCustomFunction, args = {dense, RestoreCyborgOnly, {unpack(startCyborgPosDuo)}}, swh = false}) |
|
517 table.insert(pastFlowerAnimRL, {func = AnimTurn, args = {cyborg, "Right"}}) |
|
518 table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("Well, well! Isn't that the cutest thing you've ever seen?"), SAY_SAY, 7000}}) |
|
519 table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("Two little hogs cooperating, getting past obstacles..."), SAY_SAY, 7000}}) |
|
520 table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("Let me test your skills a little, will you?"), SAY_SAY, 6000}}) |
|
521 table.insert(pastFlowerAnimRL, {func = AnimTeleportGear, args = {cyborg, 2456, 1842}}) |
|
522 table.insert(pastFlowerAnimRL, {func = AnimTeleportGear, args = {dense, 2656, 1842}}) |
|
523 table.insert(pastFlowerAnimRL, {func = AnimCustomFunction, args = {dense, CondNeedToTurn, {cyborg, dense}}}) |
|
524 table.insert(pastFlowerAnimRL, {func = AnimSay, args = {dense, loc("Why are you doing this?"), SAY_SAY, 4000}}) |
|
525 table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("You couldn't possibly believe that after refusing my offer I'd just let you go!"), SAY_SAY, 9000}}) |
|
526 table.insert(pastFlowerAnimRL, {func = AnimSay, args = {cyborg, loc("You're funny!"), SAY_SAY, 4000}}) |
|
527 table.insert(pastFlowerAnimRL, {func = AnimSwitchHog, args = {dense}}) |
|
528 table.insert(pastFlowerAnimRL, {func = AnimDisappear, swh = false, args = {cyborg, 3781, 1583}}) |
|
529 table.insert(pastFlowerAnimRL, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborgOnly, {}}}) |
|
530 AddSkipFunction(pastFlowerAnimRL, SkipPastFlowerAnim, {}) |
|
531 |
|
532 table.insert(outPitAnimRL, {func = AnimCustomFunction, args = {dense, RestoreCyborgOnly, {unpack(midCyborgPosDuo)}}, swh = false}) |
|
533 table.insert(outPitAnimRL, {func = AnimTurn, args = {cyborg, "Right"}}) |
|
534 table.insert(outPitAnimRL, {func = AnimTeleportGear, args = {dense, unpack(midDensePosDuo)}}) |
|
535 table.insert(outPitAnimRL, {func = AnimTurn, args = {dense, "Left"}}) |
|
536 table.insert(outPitAnimRL, {func = AnimSay, args = {dense, loc("OH, COME ON!"), SAY_SHOUT, 3000}}) |
|
537 table.insert(outPitAnimRL, {func = AnimSay, args = {cyborg, loc("Let's see what your comrade does now!"), SAY_SAY, 5000}}) |
|
538 table.insert(outPitAnimRL, {func = AnimSwitchHog, args = {dense}}) |
|
539 table.insert(outPitAnimRL, {func = AnimDisappear, swh = false, args = {cyborg, 3781, 1583}}) |
|
540 table.insert(outPitAnimRL, {func = AnimCustomFunction, swh = false, args = {cyborg, HideCyborgOnly, {}}}) |
|
541 AddSkipFunction(outPitAnimRL, SkipOutPitAnim, {}) |
|
542 |
|
543 table.insert(endAnim, {func = AnimCustomFunction, args = {leaks, RestoreCyborg, {437, 1700, 519, 1722}}}) |
|
544 table.insert(endAnim, {func = AnimTeleportGear, args = {leaks, 763, 1760}}) |
|
545 table.insert(endAnim, {func = AnimTeleportGear, args = {dense, 835, 1519}}) |
|
546 table.insert(endAnim, {func = AnimTurn, swh = false, args = {leaks, "Left"}}) |
|
547 table.insert(endAnim, {func = AnimTurn, swh = false, args = {dense, "Left"}}) |
|
548 table.insert(endAnim, {func = AnimTurn, swh = false, args = {cyborg, "Right"}}) |
|
549 table.insert(endAnim, {func = AnimTurn, swh = false, args = {princess, "Right"}}) |
|
550 table.insert(endAnim, {func = AnimSay, args = {princess, loc("Help me, please!"), SAY_SHOUT, 3000}}) |
|
551 table.insert(endAnim, {func = AnimSay, args = {leaks, loc("What are you doing? Let her go!"), SAY_SHOUT, 5000}}) |
|
552 table.insert(endAnim, {func = AnimSay, args = {cyborg, loc("Yeah? Watcha gonna do? Cry?"), SAY_SHOUT, 5000}}) |
|
553 table.insert(endAnim, {func = AnimSay, args = {leaks, loc("We won't let you hurt her!"), SAY_SHOUT, 4000}}) |
|
554 AddSkipFunction(endAnim, SkipEndAnimDuo, {}) |
|
555 |
|
556 table.insert(endFailAnim, {func = AnimCaption, args = {leaks, loc("Leaks A Lot, depressed for killing his loved one, failed to save the village..."), 3000}}) |
|
557 |
|
558 table.insert(winAnim, {func = AnimCustomFunction, args = {princess, CondNeedToTurn, {leaks, princess}}}) |
|
559 table.insert(winAnim, {func = AnimSay, args = {princess, loc("Thank you, oh, thank you, my heroes!"), SAY_SAY, 5000}}) |
|
560 table.insert(winAnim, {func = AnimSay, args = {princess, loc("How can I ever repay you for saving my life?"), SAY_SAY, 6000}}) |
|
561 table.insert(winAnim, {func = AnimSay, args = {leaks, loc("There's nothing more satisfying to us than seeing you share your beauty with the world every morning, my princess!"), SAY_SAY, 10000}}) |
|
562 table.insert(winAnim, {func = AnimSay, args = {leaks, loc("Let's go home!"), SAY_SAY, 3000}}) |
|
563 table.insert(winAnim, {func = AnimCaption, args = {leaks, loc("And so they discovered that cyborgs weren't invulnerable..."), 2000}}) |
|
564 |
|
565 startAnim = startAnimRL |
|
566 pastFlowerAnim = pastFlowerAnimRL |
|
567 outPitAnim = outPitAnimRL |
|
568 end |
|
569 |
|
570 function KillPrincess() |
|
571 ParseCommand("teamgone " .. loc("Cannibal Sentry")) |
|
572 TurnTimeLeft = 0 |
|
573 end |
|
574 --/////////////////////////////Misc Functions//////////////////////// |
|
575 |
|
576 function HideHedge(hedge) |
|
577 if hedgeHidden[hedge] ~= true then |
|
578 HideHog(hedge) |
|
579 hedgeHidden[hedge] = true |
|
580 end |
|
581 end |
|
582 |
|
583 function RestoreHedge(hedge) |
|
584 if hedgeHidden[hedge] == true then |
|
585 RestoreHog(hedge) |
|
586 hedgeHidden[hedge] = false |
|
587 end |
|
588 end |
|
589 |
|
590 function CondNeedToTurn(hog1, hog2) |
|
591 xl, xd = GetX(hog1), GetX(hog2) |
|
592 if xl > xd then |
|
593 AnimInsertStepNext({func = AnimTurn, args = {hog1, "Left"}}) |
|
594 AnimInsertStepNext({func = AnimTurn, args = {hog2, "Right"}}) |
|
595 elseif xl < xd then |
|
596 AnimInsertStepNext({func = AnimTurn, args = {hog2, "Left"}}) |
|
597 AnimInsertStepNext({func = AnimTurn, args = {hog1, "Right"}}) |
|
598 end |
|
599 end |
|
600 |
|
601 function SetupPlaceAlone() |
|
602 ------ AMMO CRATE LIST ------ |
|
603 --SpawnAmmoCrate(3122, 994, amShotgun) |
|
604 SpawnAmmoCrate(3124, 952, amBaseballBat) |
|
605 SpawnAmmoCrate(2508, 1110, amFirePunch) |
|
606 ------ UTILITY CRATE LIST ------ |
|
607 blowCrate = SpawnUtilityCrate(3675, 1480, amBlowTorch) |
|
608 gravityCrate = SpawnUtilityCrate(3448, 1349, amLowGravity) |
|
609 SpawnUtilityCrate(3212, 1256, amGirder) |
|
610 SpawnUtilityCrate(3113, 911, amParachute) |
|
611 sniperCrate = SpawnAmmoCrate(784, 1715, amSniperRifle) |
|
612 ------ MINE LIST ------ |
|
613 SetTimer(AddGear(3328, 1399, gtMine, 0, 0, 0, 0), 3000) |
|
614 SetTimer(AddGear(3028, 1262, gtMine, 0, 0, 0, 0), 3000) |
|
615 SetTimer(AddGear(2994, 1274, gtMine, 0, 0, 0, 0), 3000) |
|
616 SetTimer(AddGear(2956, 1277, gtMine, 0, 0, 0, 0), 3000) |
|
617 SetTimer(AddGear(2925, 1282, gtMine, 0, 0, 0, 0), 3000) |
|
618 SetTimer(AddGear(2838, 1276, gtMine, 0, 0, 0, 0), 3000) |
|
619 SetTimer(AddGear(2822, 1278, gtMine, 0, 0, 0, 0), 3000) |
|
620 SetTimer(AddGear(2786, 1283, gtMine, 0, 0, 0, 0), 3000) |
|
621 SetTimer(AddGear(2766, 1270, gtMine, 0, 0, 0, 0), 3000) |
|
622 SetTimer(AddGear(2749, 1231, gtMine, 0, 0, 0, 0), 3000) |
|
623 SetTimer(AddGear(2717, 1354, gtMine, 0, 0, 0, 0), 3000) |
|
624 SetTimer(AddGear(2167, 1330, gtMine, 0, 0, 0, 0), 3000) |
|
625 SetTimer(AddGear(2201, 1321, gtMine, 0, 0, 0, 0), 3000) |
|
626 SetTimer(AddGear(2239, 1295, gtMine, 0, 0, 0, 0), 3000) |
|
627 |
|
628 AnimSetGearPosition(leaks, 3781, 1583) |
|
629 --AnimSetGearPosition(leaks, 1650, 1583) |
|
630 AddAmmo(cannibals[1], amShotgun, 100) |
|
631 AddAmmo(leaks, amSwitch, 0) |
|
632 end |
|
633 |
|
634 function SetupPlaceDuo() |
|
635 PlaceCratesDuo() |
|
636 AnimSetGearPosition(leaks, unpack(startLeaksPosDuo)) |
|
637 AnimSetGearPosition(dense, unpack(startDensePosDuo)) |
|
638 end |
|
639 |
|
640 function SetupEventsDuo() |
|
641 AddEvent(CheckPastFlower, {}, DoPastFlower, {}, 0) |
|
642 AddEvent(CheckLeaksDead, {}, DoLeaksDead, {}, 0) |
|
643 AddEvent(CheckDenseDead, {}, DoDenseDead, {}, 0) |
|
644 AddEvent(CheckTookSniper2, {}, DoTookSniper2, {}, 0) |
|
645 end |
|
646 |
|
647 function SetupEventsAlone() |
|
648 AddEvent(CheckLeaksDead, {}, DoLeaksDead, {}, 0) |
|
649 AddEvent(CheckTookBlowTorch, {}, DoTookBlowTorch, {}, 0) |
|
650 AddEvent(CheckTookLowGravity, {}, DoTookLowGravity, {}, 0) |
|
651 AddEvent(CheckOnBridge, {}, DoOnBridge, {}, 0) |
|
652 end |
|
653 |
|
654 function StartMission() |
|
655 if m2DenseDead == 1 then |
|
656 DeleteGear(dense) |
|
657 if m2Choice == choiceAccepted then |
|
658 SetupAnimAcceptedDied() |
|
659 elseif m2Choice == choiceRefused then |
|
660 SetupAnimRefusedDied() |
|
661 else |
|
662 SetupAnimAttacked() |
|
663 end |
|
664 SetupPlaceAlone() |
|
665 SetupEventsAlone() |
|
666 AddAnim(startAnim) |
|
667 AddFunction({func = AfterStartAnim, args = {}}) |
|
668 else |
|
669 if m2Choice == choiceAccepted then |
|
670 SetupAnimAcceptedLived() |
|
671 else |
|
672 SetupAnimRefusedLived() |
|
673 end |
|
674 SetupPlaceDuo() |
|
675 SetupEventsDuo() |
|
676 AddAnim(startAnim) |
|
677 AddFunction({func = AfterStartAnim, args = {}}) |
|
678 end |
|
679 HideHedge(cyborg) |
|
680 HideHedge(princess) |
|
681 for i = 5, 8 do |
|
682 HideHedge(cannibals[i]) |
|
683 end |
|
684 |
|
685 end |
|
686 |
|
687 function SetupCourse() |
|
688 |
|
689 ------ GIRDER LIST ------ |
|
690 PlaceGirder(1091, 1150, 6) |
|
691 PlaceGirder(1091, 989, 6) |
|
692 PlaceGirder(1091, 829, 6) |
|
693 PlaceGirder(1091, 669, 6) |
|
694 PlaceGirder(1091, 668, 6) |
|
695 PlaceGirder(1091, 669, 6) |
|
696 PlaceGirder(1088, 667, 6) |
|
697 PlaceGirder(1091, 658, 6) |
|
698 PlaceGirder(1091, 646, 6) |
|
699 PlaceGirder(1091, 607, 6) |
|
700 PlaceGirder(1091, 571, 6) |
|
701 PlaceGirder(1376, 821, 6) |
|
702 PlaceGirder(1145, 1192, 1) |
|
703 PlaceGirder(1169, 1076, 3) |
|
704 PlaceGirder(1351, 1082, 4) |
|
705 PlaceGirder(1469, 987, 3) |
|
706 PlaceGirder(1386, 951, 0) |
|
707 PlaceGirder(1465, 852, 3) |
|
708 PlaceGirder(1630, 913, 0) |
|
709 PlaceGirder(1733, 856, 7) |
|
710 PlaceGirder(1688, 713, 5) |
|
711 PlaceGirder(1556, 696, 2) |
|
712 PlaceGirder(1525, 696, 2) |
|
713 PlaceGirder(1457, 697, 2) |
|
714 PlaceGirder(1413, 700, 3) |
|
715 PlaceGirder(1270, 783, 2) |
|
716 PlaceGirder(1207, 825, 2) |
|
717 PlaceGirder(1135, 775, 1) |
|
718 |
|
719 ------ UTILITY CRATE LIST ------ |
|
720 SpawnUtilityCrate(1590, 628, amParachute) |
|
721 SpawnAmmoCrate(1540, 100, amDynamite) |
|
722 SpawnUtilityCrate(2175, 1815, amLowGravity) |
|
723 SpawnUtilityCrate(2210, 1499, amFirePunch) |
|
724 girderCrate = SpawnUtilityCrate(2300, 1663, amGirder) |
|
725 SpawnUtilityCrate(610, 1394, amPickHammer) |
|
726 |
|
727 ------ BARREL LIST ------ |
|
728 SetHealth(AddGear(1148, 736, gtExplosives, 0, 0, 0, 0), 20) |
|
729 |
|
730 end |
|
731 |
|
732 function PlaceCourseMines() |
|
733 SetTimer(AddGear(1215, 1193, gtMine, 0, 0, 0, 0), 5000) |
|
734 SetTimer(AddGear(1259, 1199, gtMine, 0, 0, 0, 0), 5000) |
|
735 SetTimer(AddGear(1310, 1198, gtMine, 0, 0, 0, 0), 5000) |
|
736 SetTimer(AddGear(1346, 1196, gtMine, 0, 0, 0, 0), 5000) |
|
737 SetTimer(AddGear(1383, 1192, gtMine, 0, 0, 0, 0), 5000) |
|
738 SetTimer(AddGear(1436, 1196, gtMine, 0, 0, 0, 0), 5000) |
|
739 SetTimer(AddGear(1487, 1199, gtMine, 0, 0, 0, 0), 5000) |
|
740 SetTimer(AddGear(1651, 1209, gtMine, 0, 0, 0, 0), 5000) |
|
741 SetTimer(AddGear(1708, 1209, gtMine, 0, 0, 0, 0), 5000) |
|
742 SetTimer(AddGear(1759, 1190, gtMine, 0, 0, 0, 0), 5000) |
|
743 SetTimer(AddGear(1815, 1184, gtMine, 0, 0, 0, 0), 5000) |
|
744 end |
|
745 |
|
746 |
|
747 --////////////////////////////Event Functions//////////////////////// |
|
748 function CheckTookFire() |
|
749 return fireTaken |
|
750 end |
|
751 |
|
752 function DoTookFire() |
|
753 AddAmmo(leaks, amFirePunch, 100) |
|
754 end |
|
755 |
|
756 function CheckTookGirder1() |
|
757 return girder1Taken |
|
758 end |
|
759 |
|
760 function CheckTookGirder2() |
|
761 return girder2Taken |
|
762 end |
|
763 |
|
764 function DoTookGirder1() |
|
765 AddAmmo(dense, amGirder, 2) |
|
766 end |
|
767 |
|
768 function DoTookGirder2() |
|
769 AddAmmo(dense, amGirder, 3) |
|
770 end |
|
771 |
|
772 function CheckDensePit() |
|
773 return GetY(dense) < 1250 and StoppedGear(dense) |
|
774 end |
|
775 |
|
776 function DoDensePit() |
|
777 TurnTimeLeft = 0 |
|
778 RestoreHedge(cyborg) |
|
779 AnimWait(cyborg, 1) |
|
780 AddFunction({func = AddAnim, args = {outPitAnim}}) |
|
781 AddFunction({func = AddFunction, args = {{func = AfterOutPitAnim, args = {}}}}) |
|
782 end |
|
783 |
|
784 function CheckPastFlower() |
|
785 if denseDead == true or leaksDead == true then |
|
786 return false |
|
787 end |
|
788 return (GetX(dense) < startEventXDuo and StoppedGear(dense)) |
|
789 or (GetX(leaks) < startEventXDuo and StoppedGear(leaks)) |
|
790 end |
|
791 |
|
792 function DoPastFlower() |
|
793 TurnTimeLeft = 0 |
|
794 RestoreHedge(cyborg) |
|
795 AnimWait(cyborg, 1) |
|
796 AddFunction({func = AddAnim, args = {pastFlowerAnim}}) |
|
797 AddFunction({func = AddFunction, args = {{func = AfterPastFlowerAnim, args = {}}}}) |
|
798 end |
|
799 |
|
800 |
|
801 function CheckLeaksDead() |
|
802 return leaksDead |
|
803 end |
|
804 |
|
805 function DoLeaksDead() |
|
806 AddCaption(loc("The village, unprepared, was destroyed by the cyborgs...")) |
|
807 ParseCommand("teamgone " .. loc("Natives")) |
|
808 end |
|
809 |
|
810 function CheckDenseDead() |
|
811 return denseDead |
|
812 end |
|
813 |
|
814 function DoDenseDead() |
|
815 AddCaption(loc("The village, unprepared, was destroyed by the cyborgs...")) |
|
816 ParseCommand("teamgone " .. loc("Natives")) |
|
817 end |
|
818 |
|
819 function CheckTookBlowTorch() |
|
820 return blowTaken |
|
821 end |
|
822 |
|
823 function DoTookBlowTorch() |
|
824 ShowMission(loc("The Journey Back"), loc("The Tunnel Maker"), loc("Hint: Select the BlowTorch, aim and press [Fire]. Press [Fire] again to stop.|Don't blow up the crate."), 0, 6000) |
|
825 end |
|
826 |
|
827 function CheckTookLowGravity() |
|
828 return gravityTaken |
|
829 end |
|
830 |
|
831 function DoTookLowGravity() |
|
832 ShowMission(loc("The Journey Back"), loc("The Moonwalk"), loc("Hint: Select the LowGravity and press [Fire]."), 0, 6000) |
|
833 end |
|
834 |
|
835 function CheckOnBridge() |
|
836 return leaksDead == false and GetX(leaks) < 1651 and StoppedGear(leaks) |
|
837 end |
|
838 |
|
839 function DoOnBridge() |
|
840 TurnTimeLeft = 0 |
|
841 RestoreHedge(cyborg) |
|
842 RestoreHedge(princess) |
|
843 AnimWait(cyborg, 1) |
|
844 AddFunction({func = AddAnim, args = {midAnim}}) |
|
845 AddFunction({func = AddFunction, args = {{func = AfterMidAnimAlone, args = {}}}}) |
|
846 end |
|
847 |
|
848 function CheckGirderTaken() |
|
849 return girderTaken |
|
850 end |
|
851 |
|
852 function DoGirderTaken() |
|
853 AddAmmo(leaks, amGirder, 2) |
|
854 -- AddAmmo(leaks, amGirder, 3) |
|
855 end |
|
856 |
|
857 function CheckOnFirstGirder() |
|
858 return leaksDead == false and GetX(leaks) < 1160 and StoppedGear(leaks) |
|
859 end |
|
860 |
|
861 function DoOnFirstGirder() |
|
862 PlaceCourseMines() |
|
863 ShowMission(loc("The Journey Back"), loc("Slippery"), loc("You'd better watch your steps..."), 0, 4000) |
|
864 end |
|
865 |
|
866 function CheckTookSniper() |
|
867 return sniperTaken and StoppedGear(leaks) |
|
868 end |
|
869 |
|
870 function DoTookSniper() |
|
871 TurnTimeLeft = 0 |
|
872 RestoreHedge(cyborg) |
|
873 RestoreHedge(princess) |
|
874 AnimWait(cyborg, 1) |
|
875 AddFunction({func = AddAnim, args = {endAnim}}) |
|
876 AddFunction({func = AddFunction, args = {{func = AfterEndAnimAlone, args = {}}}}) |
|
877 end |
|
878 |
|
879 function CheckTookSniper2() |
|
880 return sniperTaken and StoppedGear(leaks) and StoppedGear(dense) |
|
881 end |
|
882 |
|
883 function DoTookSniper2() |
|
884 TurnTimeLeft = 0 |
|
885 RestoreHedge(cyborg) |
|
886 RestoreHedge(princess) |
|
887 AnimWait(cyborg, 1) |
|
888 AddFunction({func = AddAnim, args = {endAnim}}) |
|
889 AddFunction({func = AddFunction, args = {{func = AfterEndAnimDuo, args = {}}}}) |
|
890 end |
|
891 |
|
892 function CheckLost() |
|
893 return princessDead |
|
894 end |
|
895 |
|
896 function DoLost() |
|
897 AddAnim(endFailAnim) |
|
898 AddFunction({func = ParseCommand, args = {'teamgone ' .. loc('Natives')}}) |
|
899 end |
|
900 |
|
901 function CheckWon() |
|
902 return cyborgDead and not princessDead |
|
903 end |
|
904 |
|
905 function DoWon() |
|
906 if progress and progress<3 then |
|
907 SaveCampaignVar("Progress", "3") |
|
908 end |
|
909 AddAnim(winAnim) |
|
910 AddFunction({func = FinishWon, args = {}}) |
|
911 end |
|
912 |
|
913 function FinishWon() |
|
914 SwitchHog(leaks) |
|
915 ParseCommand("teamgone " .. loc("Cannibal Sentry")) |
|
916 ParseCommand("teamgone " .. loc("011101001")) |
|
917 TurnTimeLeft = 0 |
|
918 end |
|
919 |
|
920 function CheckFailedCourse() |
|
921 return TurnsLeft == 0 |
|
922 end |
|
923 |
|
924 function DoFailedCourse() |
|
925 TurnTimeLeft = 0 |
|
926 RestoreHedge(cyborg) |
|
927 RestoreHedge(princess) |
|
928 AnimWait(cyborg, 1) |
|
929 AddFunction({func = AddAnim, args = {failAnim}}) |
|
930 AddFunction({func = AddFunction, args = {{func = AfterMidFailAnim, args = {}}}}) |
|
931 end |
|
932 |
|
933 --////////////////////////////Main Functions///////////////////////// |
|
934 |
|
935 function onGameInit() |
|
936 Seed = 0 |
|
937 GameFlags = gfSolidLand + gfDisableWind |
|
938 TurnTime = 40000 |
|
939 CaseFreq = 0 |
|
940 MinesNum = 0 |
|
941 MinesTime = 3000 |
|
942 Explosives = 0 |
|
943 Delay = 5 |
|
944 Map = "A_Classic_Fairytale_journey" |
|
945 Theme = "Nature" |
|
946 |
|
947 SuddenDeathTurns = 3000 |
|
948 |
|
949 AddTeam(loc("Natives"), 29439, "Bone", "Island", "HillBilly", "cm_birdy") |
|
950 leaks = AddHog(loc("Leaks A Lot"), 0, 100, "Rambo") |
|
951 dense = AddHog(loc("Dense Cloud"), 0, 100, "RobinHood") |
|
952 |
|
953 AddTeam(loc("Cannibal Sentry"), 14483456, "Skull", "Island", "Pirate","cm_vampire") |
|
954 cannibals = {} |
|
955 for i = 1, 4 do |
|
956 cannibals[i] = AddHog(cannibalNames[i], 3, 40, "Zombi") |
|
957 AnimSetGearPosition(cannibals[i], unpack(cannibalPos[i])) |
|
958 end |
|
959 |
|
960 for i = 5, 8 do |
|
961 cannibals[i] = AddHog(cannibalNames[i], 3, 40, "Zombi") |
|
962 AnimSetGearPosition(cannibals[i], 0, 0) |
|
963 end |
|
964 |
|
965 AddTeam(loc("011101001"), 14483456, "ring", "UFO", "Robot", "cm_star") |
|
966 cyborg = AddHog(loc("Y3K1337"), 0, 200, "cyborg1") |
|
967 princess = AddHog(loc("Fell From Heaven"), 0, 200, "tiara") |
|
968 |
|
969 AnimSetGearPosition(dense, 0, 0) |
|
970 AnimSetGearPosition(leaks, 0, 0) |
|
971 AnimSetGearPosition(cyborg, 0, 0) |
|
972 AnimSetGearPosition(princess, 0, 0) |
|
973 |
|
974 AnimInit() |
|
975 end |
|
976 |
|
977 function onGameStart() |
|
978 progress = tonumber(GetCampaignVar("Progress")) |
|
979 m2Choice = tonumber(GetCampaignVar("M2Choice")) |
|
980 m2DenseDead = tonumber(GetCampaignVar("M2DenseDead")) |
|
981 m2RamonDead = tonumber(GetCampaignVar("M2RamonDead")) |
|
982 m2SpikyDead = tonumber(GetCampaignVar("M2SpikyDead")) |
|
983 StartMission() |
|
984 end |
|
985 |
|
986 function onGameTick() |
|
987 AnimUnWait() |
|
988 if ShowAnimation() == false then |
|
989 return |
|
990 end |
|
991 ExecuteAfterAnimations() |
|
992 CheckEvents() |
|
993 end |
|
994 |
|
995 function onGearDelete(gear) |
|
996 if gear == blowCrate then |
|
997 blowTaken = true |
|
998 elseif gear == fireCrate then |
|
999 fireTaken = true |
|
1000 elseif gear == gravityCrate then |
|
1001 gravityTaken = true |
|
1002 elseif gear == leaks then |
|
1003 leaksDead = true |
|
1004 elseif gear == dense then |
|
1005 denseDead = true |
|
1006 elseif gear == cyborg then |
|
1007 cyborgDead = true |
|
1008 elseif gear == princess then |
|
1009 princessDead = true |
|
1010 elseif gear == girderCrate then |
|
1011 girderTaken = true |
|
1012 elseif gear == girderCrate1 then |
|
1013 girder1Taken = true |
|
1014 elseif gear == girderCrate2 then |
|
1015 girder2Taken = true |
|
1016 elseif gear == sniperCrate then |
|
1017 sniperTaken = true |
|
1018 else |
|
1019 for i = 1, 4 do |
|
1020 if gear == cannibals[i] then |
|
1021 cannibalDead[i] = true |
|
1022 end |
|
1023 end |
|
1024 end |
|
1025 end |
|
1026 |
|
1027 function onAmmoStoreInit() |
|
1028 SetAmmo(amBlowTorch, 0, 0, 0, 1) |
|
1029 SetAmmo(amParachute, 0, 0, 0, 1) |
|
1030 SetAmmo(amGirder, 0, 0, 0, 3) |
|
1031 SetAmmo(amLowGravity, 0, 0, 0, 1) |
|
1032 SetAmmo(amBaseballBat, 0, 0, 0, 1) |
|
1033 SetAmmo(amFirePunch, 1, 0, 0, 1) |
|
1034 SetAmmo(amSkip, 9, 0, 0, 0) |
|
1035 SetAmmo(amSwitch, 9, 0, 0, 0) |
|
1036 SetAmmo(amDEagle, 9, 0, 0, 0) |
|
1037 SetAmmo(amRope, 0, 0, 0, 1) |
|
1038 SetAmmo(amSniperRifle, 0, 0, 0, 1) |
|
1039 SetAmmo(amDynamite, 0, 0, 0, 1) |
|
1040 SetAmmo(amPickHammer, 0, 0, 0, 1) |
|
1041 end |
|
1042 |
|
1043 function onNewTurn() |
|
1044 if AnimInProgress() then |
|
1045 TurnTimeLeft = -1 |
|
1046 elseif stage == endStage and CurrentHedgehog ~= leaks then |
|
1047 AnimSwitchHog(leaks) |
|
1048 SetGearMessage(leaks, 0) |
|
1049 TurnTimeLeft = -1 |
|
1050 elseif GetHogTeamName(CurrentHedgehog) ~= loc("Natives") then |
|
1051 for i = 1, 4 do |
|
1052 if cannibalDead[i] ~= true then |
|
1053 if GetX(cannibals[i]) < GetX(leaks) then |
|
1054 HogTurnLeft(cannibals[i], false) |
|
1055 else |
|
1056 HogTurnLeft(cannibals[i], true) |
|
1057 end |
|
1058 end |
|
1059 end |
|
1060 SetInputMask(band(0xFFFFFFFF, bnot(gmLeft + gmRight + gmLJump + gmHJump))) |
|
1061 TurnTimeLeft = 20000 |
|
1062 else |
|
1063 SetInputMask(0xFFFFFFFF) |
|
1064 TurnsLeft = TurnsLeft - 1 |
|
1065 end |
|
1066 end |
|
1067 |
|
1068 function onPrecise() |
|
1069 if GameTime > 2500 and AnimInProgress() then |
|
1070 SetAnimSkip(true) |
|
1071 return |
|
1072 end |
|
1073 -- AddAmmo(leaks, amRope, 100) |
|
1074 -- RemoveEventFunc(CheckPastFlower) |
|
1075 -- DeleteGear(sniperCrate) |
|
1076 end |
|
1077 |