|
1 HedgewarsScriptLoad("/Scripts/Locale.lua") |
|
2 HedgewarsScriptLoad("/Scripts/Animate.lua") |
|
3 |
|
4 -----------------------------Map-------------------------------------- |
|
5 local map = |
|
6 { |
|
7 "\255\242\4\218\132\0\53\4\253\0\0\53\4\253\132\0\102\5\92\0\0\102\5\92\132\0\106\5\205\0\0\106\5\205\132\1\1\6\37\0", |
|
8 "\1\1\6\37\132\1\124\6\160\0\1\113\6\160\132\2\157\6\111\0\2\164\6\107\132\2\252\6\178\0\2\252\6\178\132\3\224\4\179\0", |
|
9 "\3\224\4\179\132\3\38\2\209\0\3\38\2\209\132\4\109\3\179\0\4\109\3\179\132\5\124\3\172\0\5\128\3\172\132\6\69\4\239\0", |
|
10 "\6\69\4\239\132\7\175\4\32\0\7\172\4\46\132\8\116\5\18\0\3\38\2\213\132\3\41\1\244\0\3\41\1\244\132\3\94\2\245\0", |
|
11 "\8\127\5\8\132\8\127\0\14\0\8\127\0\14\132\8\194\5\29\0\8\194\5\29\132\9\36\5\82\0\9\29\5\75\132\9\180\5\103\0", |
|
12 "\9\194\5\92\132\10\51\6\5\0\10\51\6\5\132\10\216\5\152\0\10\227\5\145\132\11\189\5\212\0\11\189\5\212\132\12\91\5\131\0", |
|
13 "\12\91\5\131\132\12\253\5\191\0\12\253\5\191\132\13\149\5\106\0\13\149\5\106\132\16\11\5\106\0\14\19\5\110\132\14\16\4\236\0", |
|
14 "\14\16\4\236\132\15\66\4\236\0\15\66\4\236\132\15\66\5\110\0\14\79\4\194\132\15\6\4\194\0\14\255\4\176\132\14\255\4\49\0", |
|
15 "\14\255\4\49\132\14\76\4\53\0\14\76\4\53\132\14\76\4\201\0\14\125\4\74\128\14\128\4\187\0\14\188\4\77\128\14\185\4\179\0", |
|
16 "\14\111\4\39\129\14\76\3\252\0\14\72\3\249\129\14\72\3\147\0\14\72\3\147\129\14\97\3\235\0\14\97\3\235\129\14\146\4\28\0", |
|
17 "\14\202\4\28\129\14\248\3\238\0\14\248\3\238\129\15\17\3\133\0\15\17\3\133\129\15\27\3\235\0\15\27\3\235\129\14\230\4\49\0", |
|
18 "\1\124\6\220\130\1\244\7\13\0\1\244\7\13\130\2\104\6\206\0\2\100\6\206\130\2\30\6\178\0\2\12\6\181\130\1\135\6\213\0", |
|
19 "\3\172\7\136\130\15\41\7\136\0\15\41\7\136\130\15\41\7\62\0\15\41\7\62\130\3\175\7\52\0\3\175\7\52\130\3\126\6\206\0", |
|
20 "\3\126\6\206\130\3\122\7\133\0\3\122\7\133\130\3\186\7\136\0\8\123\7\94\136\9\173\7\101\0\8\88\7\66\130\8\88\7\119\0", |
|
21 "\9\212\7\69\130\9\212\7\126\0\8\155\0\14\133\8\151\5\11\0\8\190\2\160\131\8\194\5\1\0\14\83\3\235\131\14\114\4\21\0", |
|
22 "\15\10\3\196\131\15\10\3\235\0\15\10\3\235\131\14\220\4\32\0\14\65\5\47\137\15\20\5\36\0\15\41\5\82\132\15\41\5\82\0", |
|
23 "\3\94\3\17\138\4\137\5\124\0\3\221\3\119\138\5\57\4\250\0\4\102\4\67\160\5\26\4\74\0\4\113\5\36\161\5\142\4\222\0", |
|
24 "\4\42\5\216\169\9\89\6\26\0\6\100\5\22\145\8\134\5\64\0\6\255\4\197\140\7\161\4\120\0\7\214\4\204\146\7\214\4\204\0", |
|
25 "\10\55\6\97\147\11\13\5\247\0\11\59\6\26\146\11\224\6\30\0\12\95\6\16\153\14\55\6\90\0\13\173\5\226\153\15\196\5\212\0", |
|
26 "\15\172\7\91\152\15\165\5\230\0\15\235\7\221\142\255\238\7\207\0\14\248\6\188\152\3\217\6\178\0\3\112\6\83\143\3\31\7\101\0", |
|
27 "\3\73\7\143\140\3\73\7\143\0\15\62\7\13\140\15\62\7\13\0\15\101\7\157\140\15\101\7\157\0\2\181\6\220\141\1\205\7\108\0", |
|
28 "\2\86\6\160\137\2\150\6\128\0\2\26\6\153\134\1\96\6\195\0\1\82\6\241\136\1\226\7\59\0\2\157\7\98\155\2\157\7\98\0", |
|
29 "\1\64\7\80\149\255\249\7\27\0\1\4\6\174\148\0\25\6\86\0\0\211\6\58\139\0\7\5\219\0\0\35\5\159\142\0\4\5\47\0", |
|
30 "\8\123\0\14\199\8\187\0\11\0\16\14\5\99\199\16\14\7\245\0\255\235\4\218\199\255\238\8\25\0\8\67\2\72\202\8\208\2\72\0", |
|
31 "\8\141\1\251\202\8\141\0\74\0\8\201\2\143\195\8\204\4\49\0\8\84\2\185\205\8\204\2\188\0\8\99\2\230\205\8\187\2\230\0", |
|
32 "\8\165\3\41\131\8\144\3\3\0\8\144\3\3\131\8\60\2\248\0\8\60\2\248\131\7\252\3\59\0\7\252\3\59\131\8\137\3\31\0", |
|
33 "\8\56\3\20\131\8\102\3\20\0\8\60\3\13\194\8\60\3\13\0\8\60\3\3\128\8\60\3\31\0\7\238\3\66\128\7\214\3\84\0", |
|
34 "\7\217\3\87\128\7\217\3\98\0\7\217\3\87\128\7\200\3\91\0\6\209\4\70\208\8\18\4\95\0\0\11\4\225\131\0\0\8\21\0", |
|
35 "\15\224\5\99\131\15\245\7\252\0\15\242\5\191\192\15\196\6\33\0\15\196\6\33\192\15\245\6\209\0\15\245\6\209\192\15\193\7\115\0", |
|
36 "\15\193\7\115\192\15\235\8\18\0\15\249\5\223\196\15\217\6\40\0\15\217\6\40\196\16\4\6\188\0\15\245\6\16\196\16\21\7\77\0", |
|
37 "\16\0\6\245\196\15\214\7\112\0\15\207\7\129\196\16\0\8\4\0\15\245\7\80\196\16\4\7\207\0\15\221\5\85\196\16\11\5\184\0", |
|
38 } |
|
39 --------------------------------------------Constants------------------------------------ |
|
40 choiceAccepted = 1 |
|
41 choiceRefused = 2 |
|
42 choiceAttacked = 3 |
|
43 |
|
44 choiceEliminate = 1 |
|
45 choiceSpare = 2 |
|
46 |
|
47 leaksNum = 1 |
|
48 denseNum = 2 |
|
49 waterNum = 3 |
|
50 buffaloNum = 4 |
|
51 chiefNum = 5 |
|
52 girlNum = 6 |
|
53 wiseNum = 7 |
|
54 |
|
55 nativeNames = {loc("Leaks A Lot"), loc("Dense Cloud"), loc("Fiery Water"), |
|
56 loc("Raging Buffalo"), loc("Righteous Beard"), loc("Fell From Grace"), |
|
57 loc("Wise Oak"), loc("Ramon"), loc("Spiky Cheese") |
|
58 } |
|
59 |
|
60 nativeUnNames = {loc("Zork"), loc("Steve"), loc("Jack"), |
|
61 loc("Lee"), loc("Elmo"), loc("Rachel"), |
|
62 loc("Muriel")} |
|
63 |
|
64 nativeHats = {"Rambo", "RobinHood", "pirate_jack", "zoo_Bunny", "IndianChief", |
|
65 "tiara", "AkuAku", "rasta", "hair_yellow"} |
|
66 |
|
67 nativePos = {{110, 1310}, {984, 1907}, {1040, 1907}} |
|
68 nativePos2 = {196, 1499} |
|
69 |
|
70 cyborgNames = {loc("Unit 0x0007"), loc("Hogminator"), loc("Carol"), |
|
71 loc("Blender"), loc("Elderbot"), loc("Fiery Water")} |
|
72 cyborgsDif = {2, 2, 2, 2, 2, 1} |
|
73 cyborgsHealth = {45, 45, 45, 40, 40, 20} |
|
74 cyborgPos = {945, 1216} |
|
75 cyborgsNum = 6 |
|
76 cyborgsPos = {{2243, 1043}, {3588, 1227}, {2781, 1388}, |
|
77 {3749, 1040}, {2475, 1338}, {3853, 881}} |
|
78 cyborgsDir = {"Left", "Left", "Left", "Left", "Left", "Right"} |
|
79 |
|
80 princessPos = {3737, 1181} |
|
81 crateConsts = {} |
|
82 reactions = {} |
|
83 |
|
84 nativeMidPos = {1991, 841} |
|
85 cyborgMidPos = {2109, 726} |
|
86 nativeMidPos2 = {2250, 1071} |
|
87 -----------------------------Variables--------------------------------- |
|
88 natives = {} |
|
89 native = nil |
|
90 |
|
91 cyborgs = {} |
|
92 cyborg = nil |
|
93 |
|
94 gearDead = {} |
|
95 hedgeHidden = {} |
|
96 |
|
97 startAnim = {} |
|
98 midAnim = {} |
|
99 |
|
100 freshDead = nil |
|
101 crates = {} |
|
102 cratesNum = 0 |
|
103 -----------------------------Animations-------------------------------- |
|
104 function EmitDenseClouds(dir) |
|
105 local dif |
|
106 if dir == "Left" then |
|
107 dif = 10 |
|
108 else |
|
109 dif = -10 |
|
110 end |
|
111 AnimInsertStepNext({func = AnimVisualGear, args = {natives[1], GetX(natives[1]) + dif, GetY(natives[1]) + dif, vgtSteam, 0, true}, swh = false}) |
|
112 AnimInsertStepNext({func = AnimVisualGear, args = {natives[1], GetX(natives[1]) + dif, GetY(natives[1]) + dif, vgtSteam, 0, true}, swh = false}) |
|
113 AnimInsertStepNext({func = AnimVisualGear, args = {natives[1], GetX(natives[1]) + dif, GetY(natives[1]) + dif, vgtSteam, 0, true}, swh = false}) |
|
114 AnimInsertStepNext({func = AnimWait, args = {natives[1], 800}}) |
|
115 AnimInsertStepNext({func = AnimVisualGear, args = {natives[1], GetX(natives[1]) + dif, GetY(natives[1]) + dif, vgtSteam, 0, true}, swh = false}) |
|
116 AnimInsertStepNext({func = AnimVisualGear, args = {natives[1], GetX(natives[1]) + dif, GetY(natives[1]) + dif, vgtSteam, 0, true}, swh = false}) |
|
117 AnimInsertStepNext({func = AnimWait, args = {natives[1], 800}}) |
|
118 AnimInsertStepNext({func = AnimVisualGear, args = {natives[1], GetX(natives[1]) + dif, GetY(natives[1]) + dif, vgtSteam, 0, true}, swh = false}) |
|
119 end |
|
120 |
|
121 function AnimationSetup() |
|
122 table.insert(startAnim, {func = AnimWait, args = {natives[1], 4000}}) |
|
123 table.insert(startAnim, {func = AnimMove, args = {natives[1], "Right", unpack(nativePos2)}}) |
|
124 if m5DeployedNum == leaksNum then |
|
125 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("Those aliens are destroying the island!"), SAY_THINK, 5000}}) |
|
126 elseif m5DeployedNum == denseNum then |
|
127 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("Dude, all the plants are gone!"), SAY_THINK, 3500}}) |
|
128 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("What am I gonna...eat, yo?"), SAY_THINK, 3500}}) |
|
129 elseif m5DeployedNum == girlNum then |
|
130 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("Fell From Heaven is the best! Fell From Heaven is the greatest!"), SAY_THINK, 7000}}) |
|
131 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("Yuck! I bet they'll keep worshipping her even after I save the village!"), SAY_THINK, 7500}}) |
|
132 elseif m5DeployedNum == chiefNum then |
|
133 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("I'm getting old for this!"), SAY_THINK, 4000}}) |
|
134 elseif m5DeployedNum == waterNum then |
|
135 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("I'm getting thirsty..."), SAY_THINK, 3000}}) |
|
136 elseif m5DeployedNum == buffaloNum then |
|
137 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("I wonder why I'm so angry all the time..."), SAY_THINK, 6000}}) |
|
138 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("It must be a childhood trauma..."), SAY_THINK, 4000}}) |
|
139 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("Just wait till I get my hands on that trauma! ARGH!"), SAY_THINK, 6500}}) |
|
140 elseif m5DeployedNum == wiseNum then |
|
141 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("I could just teleport myself there..."), SAY_THINK, 4500}}) |
|
142 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("It's a shame, I forgot how to do that!"), SAY_THINK, 4500}}) |
|
143 end |
|
144 table.insert(startAnim, {func = AnimCustomFunction, args = {natives[1], RestoreHedge, {cyborg}}}) |
|
145 table.insert(startAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(cyborgPos)}}) |
|
146 table.insert(startAnim, {func = AnimTurn, args = {cyborg, "Left"}}) |
|
147 table.insert(startAnim, {func = AnimTurn, args = {natives[2], "Left"}}) |
|
148 table.insert(startAnim, {func = AnimTurn, args = {natives[3], "Left"}}) |
|
149 table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("Hello again, ") .. nativeUnNames[m5DeployedNum] .. "!", SAY_SAY, 2500}}) |
|
150 table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("I just found out that they have captured your princess!"), SAY_SAY, 7000}}) |
|
151 if m5DeployedNum == girlNum then |
|
152 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("Of course I have to save her. What did I expect?!"), SAY_SAY, 7000}}) |
|
153 elseif m5DeployedNum == denseNum then |
|
154 table.insert(startAnim, {func = AnimCustomFunction, args = {natives[1], EmitDenseClouds, {"Right"}}}) |
|
155 end |
|
156 table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("She's behind that tall thingy."), SAY_SAY, 5000}}) |
|
157 table.insert(startAnim, {func = FollowGear, swh = false, args = {princess}}) |
|
158 table.insert(startAnim, {func = AnimWait, swh = false, args = {princess, 1000}}) |
|
159 table.insert(startAnim, {func = FollowGear, swh = false, args = {cyborg}}) |
|
160 table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("I'm here to help you rescue her."), SAY_SAY, 5000}}) |
|
161 table.insert(startAnim, {func = AnimSay, args = {natives[2], loc("Yo, dude, we're here, too!"), SAY_SHOUT, 4000}}) |
|
162 table.insert(startAnim, {func = AnimSay, args = {natives[3], loc("We were trying to save her and we got lost."), SAY_SHOUT, 6000}}) |
|
163 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("That's typical of you!"), SAY_SAY, 3000}}) |
|
164 table.insert(startAnim, {func = AnimSay, args = {natives[1], loc("Why are you helping us, uhm...?"), SAY_SAY, 3000}}) |
|
165 table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("Call me Beep! Well, 'cause I'm such a nice...person!"), SAY_SAY, 2500}}) |
|
166 table.insert(startAnim, {func = AnimDisappear, args = {cyborg, unpack(cyborgPos)}}) |
|
167 table.insert(startAnim, {func = AnimSwitchHog, args = {natives[1]}}) |
|
168 table.insert(startAnim, {func = AnimWait, args = {natives[1], 1}}) |
|
169 AddSkipFunction(startAnim, SkipStartAnim, {}) |
|
170 |
|
171 table.insert(midAnim, {func = AnimCustomFunction, args = {natives[1], RestoreHedge, {cyborg}}}) |
|
172 table.insert(midAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(cyborgMidPos)}}) |
|
173 table.insert(midAnim, {func = AnimTurn, args = {cyborg, "Left"}}) |
|
174 table.insert(midAnim, {func = AnimTeleportGear, args = {natives[1], unpack(nativeMidPos)}}) |
|
175 table.insert(midAnim, {func = AnimSay, args = {cyborg, loc("Here, let me help you save her!"), SAY_SAY, 5000}}) |
|
176 table.insert(midAnim, {func = AnimSay, args = {natives[1], loc("Thanks!"), SAY_SAY, 2000}}) |
|
177 table.insert(midAnim, {func = AnimTeleportGear, args = {natives[1], unpack(nativeMidPos2)}}) |
|
178 table.insert(midAnim, {func = AnimSay, args = {natives[1], loc("Why can't he just let her go?!"), SAY_THINK, 5000}}) |
|
179 AddSkipFunction(midAnim, SkipMidAnim, {}) |
|
180 end |
|
181 |
|
182 --------------------------Anim skip functions-------------------------- |
|
183 function AfterMidAnim() |
|
184 HideHedge(cyborg) |
|
185 SetupPlace3() |
|
186 SetGearMessage(natives[1], 0) |
|
187 AddNewEvent(CheckPrincessFreed, {}, DoPrincessFreed, {}, 0) |
|
188 TurnTimeLeft = 0 |
|
189 ShowMission(loc("Family Reunion"), loc("Salvation"), loc("Get your teammates out of their natural prison and save the princess!|Hint: Drilling holes should solve everything.|Hint: It might be a good idea to place a girder before starting to drill. Just saying.|Hint: All your hedgehogs need to be above the marked height!|Hint: Leaks A Lot needs to get really close to the princess!"), 1, 7000) |
|
190 vCirc = AddVisualGear(0,0,vgtCircle,0,true) |
|
191 SetVisualGearValues(vCirc, 2625, 1500, 100, 255, 1, 10, 0, 120, 3, 0xff00ffff) |
|
192 end |
|
193 |
|
194 function SkipMidAnim() |
|
195 AnimTeleportGear(natives[1], unpack(nativeMidPos2)) |
|
196 SkipStartAnim() |
|
197 end |
|
198 |
|
199 function SetupPlace3() |
|
200 SpawnUtilityCrate(2086, 1887, amRope, 1) |
|
201 SpawnUtilityCrate(2147, 728, amBlowTorch, 2) |
|
202 SpawnUtilityCrate(2778, 1372, amPickHammer, 3) |
|
203 SpawnUtilityCrate(2579, 1886, amPickHammer, 3) |
|
204 SpawnUtilityCrate(2622, 1893, amGirder, 1) |
|
205 SpawnUtilityCrate(2671, 1883, amPortalGun, 3) |
|
206 SpawnUtilityCrate(2831, 1384, amGirder, 3) |
|
207 |
|
208 SetTimer(AddGear(2725, 1387, gtMine, 0, 0, 0, 0), 5000) |
|
209 SetTimer(AddGear(2760, 1351, gtMine, 0, 0, 0, 0), 5000) |
|
210 SetTimer(AddGear(2805, 1287, gtMine, 0, 0, 0, 0), 5000) |
|
211 SetTimer(AddGear(2831, 1376, gtMine, 0, 0, 0, 0), 5000) |
|
212 SetTimer(AddGear(2684, 1409, gtMine, 0, 0, 0, 0), 5000) |
|
213 SetTimer(AddGear(2637, 1428, gtMine, 0, 0, 0, 0), 5000) |
|
214 SetTimer(AddGear(2278, 1280, gtMine, 0, 0, 0, 0), 5000) |
|
215 SetTimer(AddGear(2311, 1160, gtMine, 0, 0, 0, 0), 5000) |
|
216 SetTimer(AddGear(2339, 1162, gtMine, 0, 0, 0, 0), 5000) |
|
217 SetTimer(AddGear(2362, 1184, gtMine, 0, 0, 0, 0), 5000) |
|
218 SetTimer(AddGear(2407, 1117, gtMine, 0, 0, 0, 0), 5000) |
|
219 SetTimer(AddGear(2437, 1143, gtMine, 0, 0, 0, 0), 5000) |
|
220 SetTimer(AddGear(2472, 1309, gtMine, 0, 0, 0, 0), 5000) |
|
221 SetTimer(AddGear(2495, 1331, gtMine, 0, 0, 0, 0), 5000) |
|
222 SetTimer(AddGear(2536, 1340, gtMine, 0, 0, 0, 0), 5000) |
|
223 SetTimer(AddGear(2569, 1360, gtMine, 0, 0, 0, 0), 5000) |
|
224 SetTimer(AddGear(2619, 1379, gtMine, 0, 0, 0, 0), 5000) |
|
225 SetTimer(AddGear(2596, 1246, gtMine, 0, 0, 0, 0), 5000) |
|
226 end |
|
227 |
|
228 function SkipStartAnim() |
|
229 AnimSwitchHog(natives[1]) |
|
230 AnimWait(natives[1], 1) |
|
231 end |
|
232 |
|
233 function AfterStartAnim() |
|
234 HideHedge(cyborg) |
|
235 SetupPlace2() |
|
236 SetGearMessage(natives[1], 0) |
|
237 AddNewEvent(CheckGearDead, {natives[1]}, EndMission, {}, 0) |
|
238 AddNewEvent(CheckGearDead, {natives[2]}, EndMission, {}, 0) |
|
239 AddNewEvent(CheckGearDead, {natives[3]}, EndMission, {}, 0) |
|
240 AddNewEvent(CheckGearDead, {princess}, EndMission, {}, 0) |
|
241 AddNewEvent(CheckCyborgsDead, {}, DoCyborgsDead, {}, 0) |
|
242 for i = 1, cyborgsNum do |
|
243 AddNewEvent(CheckGearDead, {cyborgs[i]}, DoCyborgDead, {i}, 0) |
|
244 end |
|
245 AddNewEvent(CheckOutOfCluster, {}, DoOutOfCluster, {}, 1) |
|
246 AddNewEvent(CheckOutOfGrenade, {}, DoOutOfGrenade, {}, 1) |
|
247 -- AddNewEvent(CheckNeedToHide, {}, DoNeedToHide, {}, 1) |
|
248 TurnTimeLeft = TurnTime |
|
249 ShowMission(loc("Family Reunion"), loc("Hostage Situation"), loc("Save the princess! All your hogs must survive!|Hint: Kill the cyborgs first! Use the ammo very carefully!|Hint: You might want to spare a girder for cover!"), 1, 7000) |
|
250 end |
|
251 |
|
252 function SetupPlace2() |
|
253 PlaceGirder(709, 564, 7) |
|
254 PlaceGirder(591, 677, 7) |
|
255 PlaceGirder(473, 794, 7) |
|
256 PlaceGirder(433, 933, 5) |
|
257 PlaceGirder(553, 1052, 5) |
|
258 PlaceGirder(674, 1170, 5) |
|
259 PlaceGirder(710, 1310, 7) |
|
260 PlaceGirder(648, 1427, 5) |
|
261 PlaceGirder(2110, 980, 0) |
|
262 |
|
263 SpawnAmmoCrate(814, 407, amBazooka, 4) |
|
264 clusterCrate = SpawnAmmoCrate(862, 494, amClusterBomb, 4) |
|
265 SpawnAmmoCrate(855, 486, amBee, 3) |
|
266 grenadeCrate1 = SpawnAmmoCrate(849, 459, amGrenade, 4) |
|
267 SpawnAmmoCrate(2077, 847, amWatermelon, 3) |
|
268 grenadeCrate2 = SpawnAmmoCrate(2122, 847, amGrenade, 3) |
|
269 |
|
270 SpawnUtilityCrate(747, 1577, amPickHammer, 1) |
|
271 SpawnUtilityCrate(496, 1757, amGirder, 2) |
|
272 SpawnUtilityCrate(1809, 1880, amGirder, 1) |
|
273 SpawnUtilityCrate(530, 1747, amPortalGun, 1) |
|
274 end |
|
275 |
|
276 -----------------------------Events------------------------------------ |
|
277 function CheckPrincessFreed() |
|
278 if GetX(natives[1]) == nil or GetX(natives[2]) == nil or GetX(natives[3]) == nil or GetX(princess) == nil then |
|
279 return false |
|
280 end |
|
281 return math.abs(GetX(natives[1]) - GetX(princess)) <= 15 and math.abs(GetY(natives[1]) - GetY(princess)) <= 15 and StoppedGear(natives[1]) |
|
282 and GetY(natives[2]) < 1500 and GetY(natives[3]) < 1500 and StoppedGear(natives[2]) and StoppedGear(natives[3]) |
|
283 end |
|
284 |
|
285 function DoPrincessFreed() |
|
286 AnimSay(princess, loc("Thank you, my hero!"), SAY_SAY, 0) |
|
287 if progress and progress<7 then |
|
288 SaveCampaignVar("Progress", "7") |
|
289 end |
|
290 ParseCommand("teamgone " .. loc("011101001")) |
|
291 TurnTimeLeft = 0 |
|
292 end |
|
293 |
|
294 function CheckCyborgsDead() |
|
295 return cyborgsLeft == 0 |
|
296 end |
|
297 |
|
298 function DoCyborgsDead() |
|
299 SetGearMessage(CurrentHedgehog, 0) |
|
300 RestoreHedge(princess) |
|
301 -- RemoveEventFunc(CheckNeedToHide) |
|
302 AddAnim(midAnim) |
|
303 AddFunction({func = AfterMidAnim, args = {}}) |
|
304 end |
|
305 |
|
306 function DoCyborgDead(index) |
|
307 if cyborgsLeft == 0 then |
|
308 return |
|
309 end |
|
310 if index == 1 then |
|
311 SpawnAmmoCrate(1700, 407, amBazooka, 3) |
|
312 elseif index == 2 then |
|
313 SpawnAmmoCrate(1862, 494, amClusterBomb, 3) |
|
314 elseif index == 3 then |
|
315 SpawnAmmoCrate(1855, 486, amBee, 1) |
|
316 elseif index == 4 then |
|
317 SpawnAmmoCrate(1849, 459, amGrenade, 3) |
|
318 elseif index == 5 then |
|
319 SpawnAmmoCrate(2122, 847, amGrenade, 3) |
|
320 elseif index == 6 then |
|
321 SpawnAmmoCrate(2077, 847, amWatermelon, 1) |
|
322 end |
|
323 end |
|
324 |
|
325 function CheckGearsDead(gearList) |
|
326 for i = 1, # gearList do |
|
327 if gearDead[gearList[i]] ~= true then |
|
328 return false |
|
329 end |
|
330 end |
|
331 return true |
|
332 end |
|
333 |
|
334 |
|
335 function CheckGearDead(gear) |
|
336 return gearDead[gear] |
|
337 end |
|
338 |
|
339 function EndMission() |
|
340 RemoveEventFunc(CheckPrincessFreed) |
|
341 AddCaption("So the princess was never heard of again...") |
|
342 ParseCommand("teamgone " .. loc("Natives")) |
|
343 ParseCommand("teamgone " .. loc("011101001")) |
|
344 TurnTimeLeft = 0 |
|
345 end |
|
346 |
|
347 function CheckOutOfCluster() |
|
348 return CheckGearDead(clusterCrate) and GetAmmoCount(natives[1], amClusterBomb) == 0 |
|
349 end |
|
350 |
|
351 function CheckOutOfGrenade() |
|
352 return CheckGearDead(grenadeCrate1) and CheckGearDead(grenadeCrate2) and GetAmmoCount(natives[1], amGrenade) == 0 |
|
353 end |
|
354 |
|
355 function DoOutOfCluster() |
|
356 if (GetX(natives[1]) == nil) then |
|
357 return |
|
358 end |
|
359 clusterCrate = SpawnAmmoCrate(GetX(natives[1]) - 50, GetY(natives[1]) - 50, amClusterBomb, 3) |
|
360 end |
|
361 |
|
362 function DoOutOfGrenade() |
|
363 if (GetX(natives[1]) == nil) then |
|
364 return |
|
365 end |
|
366 grenadeCrate2 = SpawnAmmoCrate(GetX(natives[1]) - 50, GetY(natives[1]) - 50, amGrenade, 3) |
|
367 end |
|
368 |
|
369 function CheckNeedToHide() |
|
370 if gearDead[princess] == true then |
|
371 return false |
|
372 end |
|
373 return TurnTimeLeft == 0 |
|
374 end |
|
375 |
|
376 function DoNeedToHide() |
|
377 HideHedge(princess) |
|
378 end |
|
379 -----------------------------Misc-------------------------------------- |
|
380 function HideHedge(hedge) |
|
381 if hedgeHidden[hedge] ~= true then |
|
382 HideHog(hedge) |
|
383 hedgeHidden[hedge] = true |
|
384 end |
|
385 end |
|
386 |
|
387 function RestoreHedge(hedge) |
|
388 if hedgeHidden[hedge] == true then |
|
389 RestoreHog(hedge) |
|
390 hedgeHidden[hedge] = false |
|
391 end |
|
392 end |
|
393 |
|
394 function GetVariables() |
|
395 progress = tonumber(GetCampaignVar("Progress")) |
|
396 m5DeployedNum = tonumber(GetCampaignVar("M5DeployedNum")) |
|
397 m2Choice = tonumber(GetCampaignVar("M2Choice")) |
|
398 m5Choice = tonumber(GetCampaignVar("M5Choice")) |
|
399 end |
|
400 |
|
401 function SetupPlace() |
|
402 SetHogHat(natives[1], nativeHats[m5DeployedNum]) |
|
403 SetHogName(natives[1], nativeNames[m5DeployedNum]) |
|
404 if m2Choice ~= choiceAccepted or m5Choice ~= choiceEliminate then |
|
405 DeleteGear(cyborgs[cyborgsNum]) |
|
406 cyborgsNum = cyborgsNum - 1 |
|
407 end |
|
408 HideHedge(cyborg) |
|
409 end |
|
410 |
|
411 function SetupAmmo() |
|
412 AddAmmo(cyborgs[1], amBazooka, 100) |
|
413 AddAmmo(cyborgs[1], amGrenade, 100) |
|
414 AddAmmo(cyborgs[1], amClusterBomb, 100) |
|
415 AddAmmo(cyborgs[1], amSniperRifle, 1) |
|
416 AddAmmo(cyborgs[1], amDynamite, 100) |
|
417 AddAmmo(cyborgs[1], amBaseballBat, 100) |
|
418 AddAmmo(cyborgs[1], amMolotov, 100) |
|
419 AddAmmo(cyborgs[1], amWatermelon, 1) |
|
420 AddAmmo(cyborgs[1], amAirStrike, 2) |
|
421 AddAmmo(cyborgs[1], amDrillStrike, 1) |
|
422 end |
|
423 |
|
424 function AddHogs() |
|
425 AddTeam(loc("Natives"), 29439, "Bone", "Island", "HillBilly", "cm_birdy") |
|
426 for i = 7, 9 do |
|
427 natives[i-6] = AddHog(nativeNames[i], 0, 100, nativeHats[i]) |
|
428 gearDead[natives[i-6]] = false |
|
429 end |
|
430 |
|
431 AddTeam(loc("011101001"), 14483456, "ring", "UFO", "Robot", "cm_star") |
|
432 cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1") |
|
433 princess = AddHog(loc("Fell From Heaven"), 0, 333, "tiara") |
|
434 gearDead[cyborg] = false |
|
435 gearDead[princess] = false |
|
436 |
|
437 AddTeam(loc("Biomechanic Team"), 14483456, "ring", "UFO", "Robot", "cm_star") |
|
438 for i = 1, cyborgsNum do |
|
439 cyborgs[i] = AddHog(cyborgNames[i], cyborgsDif[i], cyborgsHealth[i], "cyborg2") |
|
440 gearDead[cyborgs[i]] = false |
|
441 end |
|
442 cyborgsLeft = cyborgsNum |
|
443 |
|
444 for i = 1, 3 do |
|
445 AnimSetGearPosition(natives[i], unpack(nativePos[i])) |
|
446 end |
|
447 |
|
448 AnimSetGearPosition(cyborg, unpack(cyborgPos)) |
|
449 AnimSetGearPosition(princess, unpack(princessPos)) |
|
450 AnimTurn(princess, "Left") |
|
451 |
|
452 for i = 1, cyborgsNum do |
|
453 AnimSetGearPosition(cyborgs[i], unpack(cyborgsPos[i])) |
|
454 AnimTurn(cyborgs[i], cyborgsDir[i]) |
|
455 end |
|
456 end |
|
457 |
|
458 function CondNeedToTurn(hog1, hog2) |
|
459 xl, xd = GetX(hog1), GetX(hog2) |
|
460 if xl == nil or xd == nil then |
|
461 return |
|
462 end |
|
463 if xl > xd then |
|
464 AnimInsertStepNext({func = AnimTurn, args = {hog1, "Left"}}) |
|
465 AnimInsertStepNext({func = AnimTurn, args = {hog2, "Right"}}) |
|
466 elseif xl < xd then |
|
467 AnimInsertStepNext({func = AnimTurn, args = {hog2, "Left"}}) |
|
468 AnimInsertStepNext({func = AnimTurn, args = {hog1, "Right"}}) |
|
469 end |
|
470 end |
|
471 |
|
472 -----------------------------Main Functions---------------------------- |
|
473 |
|
474 function onGameInit() |
|
475 Seed = 0 |
|
476 GameFlags = gfSolidLand + gfDisableLandObjects + gfDisableGirders |
|
477 TurnTime = 60000 |
|
478 CaseFreq = 0 |
|
479 MinesNum = 0 |
|
480 MinesTime = 3000 |
|
481 Explosives = 0 |
|
482 Delay = 10 |
|
483 MapGen = 2 |
|
484 Theme = "Hell" |
|
485 SuddenDeathTurns = 35 |
|
486 |
|
487 for i = 1, #map do |
|
488 ParseCommand('draw ' .. map[i]) |
|
489 end |
|
490 |
|
491 AddHogs() |
|
492 AnimInit() |
|
493 end |
|
494 |
|
495 function onGameStart() |
|
496 GetVariables() |
|
497 SetupAmmo() |
|
498 SetupPlace() |
|
499 AnimationSetup() |
|
500 AddAnim(startAnim) |
|
501 AddFunction({func = AfterStartAnim, args = {}}) |
|
502 end |
|
503 |
|
504 function onGameTick() |
|
505 AnimUnWait() |
|
506 if ShowAnimation() == false then |
|
507 return |
|
508 end |
|
509 ExecuteAfterAnimations() |
|
510 CheckEvents() |
|
511 end |
|
512 |
|
513 function onGearDelete(gear) |
|
514 gearDead[gear] = true |
|
515 if GetGearType(gear) == gtHedgehog then |
|
516 if GetHogTeamName(gear) == loc("Biomechanic Team") then |
|
517 cyborgsLeft = cyborgsLeft - 1 |
|
518 end |
|
519 end |
|
520 end |
|
521 |
|
522 function onAmmoStoreInit() |
|
523 SetAmmo(amSkip, 9, 0, 0, 0) |
|
524 SetAmmo(amSwitch, 9, 0, 0, 0) |
|
525 SetAmmo(amBazooka, 0, 0, 0, 8) |
|
526 SetAmmo(amClusterBomb,0, 0, 0, 8) |
|
527 SetAmmo(amBee, 0, 0, 0, 3) |
|
528 SetAmmo(amGrenade, 0, 0, 0, 8) |
|
529 SetAmmo(amWatermelon, 0, 0, 0, 2) |
|
530 SetAmmo(amSniperRifle, 0, 0, 0, 3) |
|
531 SetAmmo(amPickHammer, 0, 0, 0, 1) |
|
532 SetAmmo(amGirder, 0, 0, 0, 3) |
|
533 SetAmmo(amPortalGun, 0, 0, 0, 1) |
|
534 end |
|
535 |
|
536 function onNewTurn() |
|
537 if AnimInProgress() then |
|
538 TurnTimeLeft = -1 |
|
539 return |
|
540 end |
|
541 if GetHogTeamName(CurrentHedgehog) == loc("011101001") then |
|
542 if CheckCyborgsDead() ~= true then |
|
543 for i = 1, 3 do |
|
544 if gearDead[natives[i]] ~= true then |
|
545 HideHedge(natives[i]) |
|
546 end |
|
547 end |
|
548 end |
|
549 TurnTimeLeft = 0 |
|
550 else |
|
551 for i = 1, 3 do |
|
552 if gearDead[natives[i]] ~= true then |
|
553 RestoreHedge(natives[i]) |
|
554 end |
|
555 end |
|
556 end |
|
557 end |
|
558 |
|
559 function onPrecise() |
|
560 if GameTime > 2500 and AnimInProgress() then |
|
561 SetAnimSkip(true) |
|
562 return |
|
563 end |
|
564 -- HideHedge(princess) |
|
565 -- for i = 1, 5 do |
|
566 -- DeleteGear(cyborgs[i]) |
|
567 -- end |
|
568 -- AddAmmo(natives[1], amTeleport, 100) |
|
569 end |