|
1 --------------------------------------------------------------- |
|
2 --- HEDGE EDITOR 0.9 (for use with Hedgewars 0.9.22 and up) |
|
3 --------------------------------------------------------------- |
|
4 -- a horrible mission editor by mikade |
|
5 -- place gears like a boss |
|
6 |
|
7 -- feel free to shower me with your adoration and/or hate mail |
|
8 -- more info can be found at http://hedgewars.org/HedgeEditor |
|
9 |
|
10 -- special thanks to nemo, unC0Rr, sheepluva and koda for their assistance |
|
11 |
|
12 --------------------------------------- |
|
13 -- GETTING STARTED (for best results!) |
|
14 --------------------------------------- |
|
15 -- create a weaponset that has NO DELAYS on any weapons, and that gives you 1 ammo per crate |
|
16 |
|
17 -- (optional) copy GameLogExtractor.html, jquery-1.js |
|
18 -- into your Documents/Hedgewars/Logs folder |
|
19 |
|
20 -- (optional) copy hwpmapconverter somewhere easily accessible |
|
21 |
|
22 -- (optional) profit?? |
|
23 |
|
24 --------------------------------------- |
|
25 -- CORE FEATURES as of latest version |
|
26 --------------------------------------- |
|
27 -- togglable help (press PRECISE + 1, while you have a tool (e.g. airstrike) selected) |
|
28 -- you can also the set the ScriptParameter in scheme, e.g: helpDisabled="true" |
|
29 |
|
30 -- place girders, rubberbands and custom sprites anywhere on the map. |
|
31 -- the above objects may be destructible, indestructible, icy, or bouncy. |
|
32 |
|
33 -- place mines, sticky mines, air mines, barrels, weapon crates, utility crates, |
|
34 -- health crates, targets, and cleavers anywhere on the map. |
|
35 |
|
36 -- select, reposition, modify, or delete placed objects. |
|
37 |
|
38 -- read in data from a previously generated map and allow the map to be edited/saved again |
|
39 |
|
40 -- contextual cursor and menu graphics |
|
41 -- placement sounds that are slightly more soothing |
|
42 |
|
43 -- meaningless version number |
|
44 -- extra whitespace |
|
45 -- fewer capital letters than ideal |
|
46 |
|
47 -- upon saving, all level data will be output to logs/game0.log. |
|
48 -- game0.log also includes a lot of other data so if you only want to see the relevant lines of code |
|
49 -- you can use GameLogExtractor.html to extract and prune the log into a cleaner form of data, |
|
50 -- specifically: either as an automagically generated template mission, just core data, or hwmap points. |
|
51 -- from there, please copy and paste any lines relevant to your interest into an existing |
|
52 -- (or totally empty!) script and edit them according to taste. |
|
53 |
|
54 -------------------------- |
|
55 -- MODE SPECIFIC SUPPORT |
|
56 -------------------------- |
|
57 -- FOR CUSTOM MISSIONS/CAMPAIGN LEVELS: |
|
58 -- the names/hats/flags/voices/graves of any teams/hogs that you use to play this script can be saved, |
|
59 -- as can (most of) the settings from your scheme and weapons selection. |
|
60 -- HOWEVER, you can also use the 'hog identity' tool to give hogs preset names/hats/weapons/health |
|
61 -- or use the 'team identity' tool to give an entire team themed names/hats. |
|
62 -- give hogs differing health by using the health modification tool |
|
63 -- create goals by tagging gears with victory/defeat/collection markers (somewhat implemented) |
|
64 -- flavor text, as well as victory/defeat conditions will be generated based on these tags. |
|
65 |
|
66 -- SHOPPA BALANCE / CONSTRUCTION MODE (partial and/or possibly decremented): |
|
67 -- Press 1-5 while repositioning hogs with the reposition tool to assign them (their position) a rank. |
|
68 -- This value will be expressed as a colour that is intended to represent how "good" or "bad" |
|
69 -- a position on the map is. These ranks/points will be output along with other game data to game0.log |
|
70 -- This data could be pasted into the ShoppaBalance script to create balances for additional maps. |
|
71 |
|
72 -- TECH RACER / HEDGE EDITOR / POINT INTERPRETER: |
|
73 -- place/remove waypoints/special points |
|
74 -- use the ScriptParameter in the frontend scheme editor to set additional options, e.g. |
|
75 -- ufoFuel=1000 (Flying Saucer will start with half the normal fuel. A value of 2000 is infinite fuel) |
|
76 -- portalDistance=15 (This is the distance portals can travel before fizzling) |
|
77 -- m=3 (load a particular map from the map library of Data/Scripts/TechMaps |
|
78 -- helpDisabled="true" (the help pop-up overlay will be disabled by default) |
|
79 |
|
80 -- when saving data, points for conversion to HWMAP are also generated and placed inside block comments. |
|
81 -- copy paste/these points at the START of a converted HWMAP and then convert the map back to HWMAP format. |
|
82 -- following the above procedure it is then possible to load the map in frontend and play it using a |
|
83 -- script like TechRacer (or HedgeEditor itself) that can interpret the points using InterpretPoints() |
|
84 |
|
85 --------------------------------------- |
|
86 -- DISCLAIMER |
|
87 --------------------------------------- |
|
88 -- well, I really just made this for myself, so it's usage might be a little complicated for others. |
|
89 -- it also probably has a million errors, and has grown rather bloated over time due to the addition of |
|
90 -- more and more features that my initial design didn't take into account. |
|
91 |
|
92 -- anyway, I've tried to make it more user-friendly by including more comments and gradually adding |
|
93 -- some basic guidelines such as those listed above, and also the in-game Help displays for each tool. |
|
94 |
|
95 ----------------------------------------- |
|
96 -- GIANT "TO DO" LIST / OTHER NOTES |
|
97 ----------------------------------------- |
|
98 |
|
99 -- try to prune waypoint list and portal/ufo fuel in the mission template |
|
100 -- for gamelog extractor |
|
101 |
|
102 -- I should probably check if there are tagged gears on save |
|
103 -- and if there are enable gfOneClanMode so that user can't |
|
104 -- just destroy all hogs to win map. |
|
105 -- (what happens if we lose all our hogs?) |
|
106 |
|
107 -- I might be able to make the flavor text even better (assassinate hogName) by |
|
108 -- checking if there is only 1 hog, etc. |
|
109 |
|
110 -- possibly try show landflag addcaption constantly like we do for superdelete when |
|
111 -- using girders / rubbers. |
|
112 |
|
113 -- check to what extent hog info is preserved on saving (does health/weps really save correctly?) |
|
114 -- atm I think it's only for missions so I don't think it is preserved in core data |
|
115 |
|
116 -- check if we lose a mission when the enemy collects our crate (we should) |
|
117 |
|
118 -- try and find out why we can't save the Theme, that feels really dumb |
|
119 |
|
120 -- How about a weapons profile tool that is used with team ammo |
|
121 -- and then hog identity tool would only be available if gfPerHogAmmo is set |
|
122 |
|
123 -- INVESTIGATE when you can bother to do so |
|
124 -- is airmine still missing anywhere, e.g. the weplist generated FOR THE TEMPLATE SCRIPT |
|
125 |
|
126 -- [high] waypoints don't reload yet |
|
127 |
|
128 -- [high] look into placing dud/random mines (probably needs a nil value) |
|
129 |
|
130 -- [high] add missing weps/utils/gears as they appear |
|
131 -- some gameflags and settings are probably missing, too (diff border types etc) |
|
132 -- some themes are also probably missing: cake, hoggywood? |
|
133 -- the ongameinit stuff is probaably missing something akin to numAirMines |
|
134 -- and also probably scriptParam and gravity etc. |
|
135 |
|
136 -- [med] add a limited form of save/load within level before mass-output |
|
137 |
|
138 -- [med] rework gameflag handling to use the newer API methods (done?) |
|
139 |
|
140 -- [med] maybe incorporate portal effects / ufo tracking into the template generated script if |
|
141 -- you want the missions to use it |
|
142 |
|
143 -- [med] improve ammo handling (if possible, take more scheme settings into account) |
|
144 -- also be sure to generate wep data so crates don't have 0 in them (done?) |
|
145 |
|
146 -- [low] match the user picked color to the color array |
|
147 |
|
148 -- [low] break up the division of labor of the tools into airstrike, minestrike, napalm, etc. |
|
149 --[[ |
|
150 girder = "Girder Placement Mode", |
|
151 rubber = "Rubber Placement Mode", |
|
152 |
|
153 airstrike = (target sprite) (gear placement) |
|
154 "Mine Placement Mode", |
|
155 "Sticky Mine Placement Mode", |
|
156 "Air Mine Placement Mode", |
|
157 "Barrel Placement Mode", |
|
158 "Target Placement Mode", |
|
159 "Cleaver Placement Mode", |
|
160 |
|
161 drillstrike = crate sprite (crate placement mode) |
|
162 "Health Crate Placement Mode", |
|
163 "Weapon Crate Placement Mode", |
|
164 "Utility Crate Placement Mode", |
|
165 |
|
166 |
|
167 napalm = arrow sprite (selection/modification/deletion mode) |
|
168 "Advanced Repositioning Mode", -- also include a delete |
|
169 "Tagging Mode", |
|
170 "Hog Identity Mode", |
|
171 "Team Identity Mode", |
|
172 "Health Modification Mode", |
|
173 "Sprite Testing Mode", |
|
174 "Sprite Modification Mode", |
|
175 "Sprite Placement Mode", |
|
176 "Waypoint Placement Mode" |
|
177 }]] |
|
178 |
|
179 -- [low] improve support for ShoppaBalance and ConstructionMode, see ranking) |
|
180 |
|
181 -- [low] consider combining landflags |
|
182 |
|
183 -- [low] periodically rework the code to make it less terrible (hahahahahaha!) |
|
184 |
|
185 -- [low] eventually incorporate scripted structures into the editor / mission mode |
|
186 |
|
187 -- [low] some kind of support for single team training missions |
|
188 -- we could possibly add gfOneClanMode and kill the other team we're playing with? |
|
189 |
|
190 -- [never?] set all actors to heresurrectible (why did I want this?) |
|
191 |
|
192 -- [never?] more detailed goal tagging and multi-stage triggers |
|
193 |
|
194 -- [never?] theoretically might be possible to create forts (and other grouped objects) |
|
195 -- that can be mirrored and generated/placed in a big enough space |
|
196 |
|
197 -- [never?] add a pulsing glow thing for sprites you have selected, |
|
198 -- kind of like the invaders in SpaceInvader (currently they are just displayed as purple) |
|
199 |
|
200 -- [never?] add the thing that would be useful for this editor, but that others might use to cheat |
|
201 |
|
202 -- [never?] improve "illegal" placement detection (pretty sure should just let people do what they want) |
|
203 |
|
204 -- [never?] add GUIs for editing ammo, init settings, additional gear attributes |
|
205 -- perhaps using precise with timer to enable/disable certain features |
|
206 |
|
207 --[[ gui menu ideas that have long since been abandoned |
|
208 INITIALISATION MENU |
|
209 --gameFlags, etc |
|
210 |
|
211 Map |
|
212 Theme |
|
213 TurnTime |
|
214 Explosives |
|
215 MinesNum |
|
216 CaseFreq |
|
217 Delay |
|
218 |
|
219 HealthCaseProb |
|
220 HealthCaseAmount |
|
221 DamagePercent |
|
222 MinesTime |
|
223 MineDudPercent |
|
224 SuddenDeathTurns |
|
225 WaterRise |
|
226 HealthDecrease |
|
227 HOG MENU |
|
228 health |
|
229 name (can be randomly generated from the list of hog names already in localisation) |
|
230 poisoned (true/false) |
|
231 hat |
|
232 hog level? |
|
233 TEAM MENU |
|
234 name (can be randomly generated as above?) should there be an array of teams with an array of names |
|
235 colour |
|
236 grave |
|
237 fort |
|
238 voicepack |
|
239 flag |
|
240 |
|
241 -- this below stuff is less important |
|
242 STICKY MINE MENU |
|
243 timer? |
|
244 MINE MENU |
|
245 timer / dud |
|
246 MEDKIT MENU / EXPLOSIVE MENU |
|
247 health amount |
|
248 WEP AND UTIL CRATE MENU |
|
249 contents |
|
250 |
|
251 ---------------------------------------- |
|
252 -- MAP IDEAS |
|
253 ---------------------------------------- |
|
254 -- try to create a portal race (limit portal distance) |
|
255 -- for portal race, include barriers that you need to drill shoot through to get lazer site crates |
|
256 |
|
257 -- try make a map that uses sinegun to jump between bouncy boxes (not easy until we get better control over landflags) |
|
258 |
|
259 -- how about a mission where you have to trap / freeze all the enemy hogs |
|
260 -- and aren't allowed to kill them? |
|
261 -- can set it on the islands map. |
|
262 -- landgun |
|
263 -- girder |
|
264 -- mudball |
|
265 -- hammer |
|
266 -- seduction? (call a hog who has firepunch into a ditch |
|
267 -- icegun (do this so you can freeze guys in an area and then blowtorch/explode an obstacle) |
|
268 -- jump across a bridge that has been mined and then bat the enemy to the other side. |
|
269 |
|
270 -- possibly the same as part of the above, possibly different, what about a heist mission |
|
271 -- the objective is to steal 3 enemy crates |
|
272 -- the first one you have to fall through an invul tunnel of sticky mines and then parachute. |
|
273 -- the second one you have to drill rocket / portal. |
|
274 -- the third one you have to underwater ufo into, but only after opening it up with an underwater bee. |
|
275 |
|
276 ]] |
|
277 |
|
278 --------------------------------------------------------- |
|
279 -- HEDGE EDITOR, SCRIPT BEGINS (Hey yo, it's about time) |
|
280 --------------------------------------------------------- |
|
281 |
|
282 HedgewarsScriptLoad("/Scripts/Locale.lua") |
|
283 HedgewarsScriptLoad("/Scripts/Tracker.lua") |
|
284 HedgewarsScriptLoad("/Scripts/Params.lua") |
|
285 HedgewarsScriptLoad("/Scripts/TechMaps.lua") |
|
286 |
|
287 -- experimental crap |
|
288 --local destroyMap = false |
|
289 |
|
290 ----------------------------------------- |
|
291 -- tracking vars for save/load purposes |
|
292 ----------------------------------------- |
|
293 |
|
294 local teamCounter = 0 |
|
295 local lastRecordedTeam = "" |
|
296 local hhs = {} |
|
297 |
|
298 local waypointList = {} |
|
299 local girderList = {} |
|
300 local rubberList = {} |
|
301 local spriteList = {} |
|
302 |
|
303 local mineList = {} |
|
304 local sMineList = {} |
|
305 local airMineList = {} |
|
306 local targetList = {} |
|
307 local knifeList = {} |
|
308 local explosivesList = {} |
|
309 local healthCrateList = {} |
|
310 local wepCrateList = {} |
|
311 local utilCrateList = {} |
|
312 local hogDataList = {} |
|
313 local AIHogDataList = {} |
|
314 local hFlagList = {} |
|
315 local previewDataList = {} |
|
316 |
|
317 local shoppaPointList = {} |
|
318 local shoppaPX = {} |
|
319 local shoppaPY = {} |
|
320 local shoppaPR = {} |
|
321 |
|
322 --------------------------------- |
|
323 -- crates are made of this stuff |
|
324 --------------------------------- |
|
325 |
|
326 local atkArray = |
|
327 { |
|
328 {amBazooka, "amBazooka", 2, loc("Bazooka")}, |
|
329 {amBee, "amBee", 3, loc("Homing Bee")}, |
|
330 {amMortar, "amMortar", 21, loc("Mortar")}, |
|
331 {amDrill, "amDrill", 28, loc("Drill Rocket")}, |
|
332 {amSnowball, "amSnowball", 50, loc("Mudball")}, |
|
333 |
|
334 {amGrenade, "amGrenade", 0, loc("Grenade")}, |
|
335 {amClusterBomb, "amClusterBomb", 1, loc("Cluster Bomb")}, |
|
336 {amMolotov, "amMolotov", 39, loc("Molotov Cocktail")}, |
|
337 {amWatermelon, "amWatermelon", 25, loc("Watermelon Bomb")}, |
|
338 {amHellishBomb, "amHellishBomb", 26, loc("Hellish Handgrenade")}, |
|
339 {amGasBomb, "amGasBomb", 43, loc("Limburger")}, |
|
340 |
|
341 {amShotgun, "amShotgun", 4, loc("Shotgun")}, |
|
342 {amDEagle, "amDEagle", 9, loc("Desert Eagle")}, |
|
343 {amFlamethrower,"amFlamethrower", 45, loc("Flamethrower")}, |
|
344 {amSniperRifle, "amSniperRifle", 37, loc("Sniper Rifle")}, |
|
345 {amSineGun, "amSineGun", 44, loc("SineGun")}, |
|
346 {amIceGun, "amIceGun", 53, loc("Freezer")}, |
|
347 {amLandGun, "amLandGun", 52, loc("Land Spray")}, |
|
348 |
|
349 {amFirePunch, "amFirePunch", 11, loc("Shoryuken")}, |
|
350 {amWhip, "amWhip", 12, loc("Whip")}, |
|
351 {amBaseballBat, "amBaseballBat", 13, loc("Baseball Bat")}, |
|
352 {amKamikaze, "amKamikaze", 22, loc("Kamikaze")}, |
|
353 {amSeduction, "amSeduction", 24, loc("Seduction")}, |
|
354 {amHammer, "amHammer", 47, loc("Hammer")}, |
|
355 |
|
356 {amMine, "amMine", 8, loc("Mine")}, |
|
357 {amDynamite, "amDynamite", 10, loc("Dynamite")}, |
|
358 {amCake, "amCake", 23, loc("Cake")}, |
|
359 {amBallgun, "amBallgun", 29, loc("Ballgun")}, |
|
360 {amRCPlane, "amRCPlane", 30, loc("RC Plane")}, |
|
361 {amSMine, "amSMine", 46, loc("Sticky Mine")}, |
|
362 |
|
363 {amAirAttack, "amAirAttack", 15, loc("Air Attack")}, |
|
364 {amMineStrike, "amMineStrike", 16, loc("Mine Strike")}, |
|
365 {amDrillStrike, "amDrillStrike", 49, loc("Drill Strike")}, |
|
366 {amAirMine, "amAirMine", 56, loc("Air Mine")}, |
|
367 {amNapalm, "amNapalm", 27, loc("Napalm")}, |
|
368 {amPiano, "amPiano", 42, loc("Piano Strike")}, |
|
369 |
|
370 {amKnife, "amKnife", 54, loc("Cleaver")}, |
|
371 |
|
372 {amBirdy, "amBirdy", 40, loc("Birdy")} |
|
373 |
|
374 } |
|
375 |
|
376 local utilArray = |
|
377 { |
|
378 {amBlowTorch, "amBlowTorch", 17, loc("BlowTorch")}, |
|
379 {amPickHammer, "amPickHammer", 5, loc("PickHammer")}, |
|
380 {amGirder, "amGirder", 18, loc("Girder")}, |
|
381 {amRubber, "amRubber", 55, loc("Rubber")}, |
|
382 {amPortalGun, "amPortalGun", 41, loc("Personal Portal Device")}, |
|
383 |
|
384 {amRope, "amRope", 7, loc("Rope")}, |
|
385 {amParachute, "amParachute", 14, loc("Parachute")}, |
|
386 {amTeleport, "amTeleport", 19, loc("Teleport")}, |
|
387 {amJetpack, "amJetpack", 38, loc("Flying Saucer")}, |
|
388 |
|
389 {amInvulnerable, "amInvulnerable", 33, loc("Invulnerable")}, |
|
390 {amLaserSight, "amLaserSight", 35, loc("Laser Sight")}, |
|
391 {amVampiric, "amVampiric", 36, loc("Vampirism")}, |
|
392 |
|
393 {amLowGravity, "amLowGravity", 31, loc("Low Gravity")}, |
|
394 {amExtraDamage, "amExtraDamage", 32, loc("Extra Damage")}, |
|
395 {amExtraTime, "amExtraTime", 34, loc("Extra Time")}, |
|
396 |
|
397 {amResurrector, "amResurrector", 48, loc("Resurrector")}, |
|
398 {amTardis, "amTardis", 51, loc("Tardis")}, |
|
399 |
|
400 {amSwitch, "amSwitch", 20, loc("Switch Hog")} |
|
401 } |
|
402 |
|
403 --skiphog is 6 |
|
404 |
|
405 ---------------------------- |
|
406 -- hog and map editing junk |
|
407 ---------------------------- |
|
408 |
|
409 local preMadeTeam = { |
|
410 |
|
411 { |
|
412 "Clowns", |
|
413 {"WhySoSerious","clown-copper","clown-crossed","clown","Joker"}, |
|
414 {"Baggy","Bingo","Bobo","Bozo","Buster","Chester","Copper","Heckles","Giggles","Jingo","Molly","Loopy","Patches","Tatters"}, |
|
415 "R","cm_birdy","Mobster","Rubberduck","Castle" |
|
416 }, |
|
417 |
|
418 { |
|
419 "Street Fighters", |
|
420 {"sf_balrog","sf_blanka","sf_chunli","sf_guile","sf_honda","sf_ken","sf_ryu","sf_vega"}, |
|
421 {"Balrog","Blanka","Chunli","Guile","Honda","Ken","Ryu","Vega"}, |
|
422 "F","cm_balrog","Surfer","dragonball","Castle" |
|
423 }, |
|
424 |
|
425 { |
|
426 "Cybernetic Empire", |
|
427 {"cyborg1","cyborg2"}, |
|
428 {"Unit 189","Unit 234","Unit 333","Unit 485","Unit 527","Unit 638","Unit 709","Unit 883"}, |
|
429 "R","cm_binary","Robot","Grave","Castle" |
|
430 }, |
|
431 |
|
432 { |
|
433 "Color Squad", |
|
434 {"hair_blue","hair_green","hair_red","hair_yellow","hair_purple","hair_grey","hair_orange","hair_pink"}, |
|
435 {"Blue","Green","Red","Yellow","Purple","Grey","Orange","Pink"}, |
|
436 "F","cm_birdy","Singer","Grave","Castle" |
|
437 }, |
|
438 |
|
439 { |
|
440 "Fruit", |
|
441 {"fr_apple","fr_banana","fr_lemon","fr_orange","fr_pumpkin","fr_tomato"}, |
|
442 {"Juicy","Squishy","Sweet","Sour","Bitter","Ripe","Rotten","Fruity"}, |
|
443 "R","cm_mog","Default","Cherry","Castle" |
|
444 }, |
|
445 |
|
446 { |
|
447 "The Police", |
|
448 {"bobby","bobby2v","policecap","policegirl","royalguard"}, |
|
449 {"Hightower","Lassard","Callahan","Jones","Harris","Thompson","Mahoney","Hooks","Tackleberry"}, |
|
450 "R","cm_star","British","Statue","Castle" |
|
451 }, |
|
452 |
|
453 { |
|
454 "The Ninja-Samurai Alliance", |
|
455 {"NinjaFull","NinjaStraight","NinjaTriangle","Samurai","StrawHat","StrawHatEyes","StrawHatFacial","naruto"}, |
|
456 {"Bushi","Tatsujin","Itami","Arashi","Shinobi","Ukemi","Godai","Kenshi","Ninpo"}, |
|
457 "R","japan","Default","octopus","Castle" |
|
458 }, |
|
459 |
|
460 { |
|
461 "Pokemon", |
|
462 {"poke_ash","poke_charmander","poke_chikorita","poke_jigglypuff","poke_lugia","poke_mudkip","poke_pikachu","poke_slowpoke","poke_squirtle","poke_voltorb"}, |
|
463 {"Ash","Charmander","Chikorita","Jigglypuff","Lugia","Mudkip","Pikachu","Slowpoke","Squirtle","Voltorb"}, |
|
464 "FR","cm_pokemon","Default","pokeball","Castle" |
|
465 }, |
|
466 |
|
467 { |
|
468 "The Zoo", |
|
469 {"zoo_Bat","zoo_Beaver","zoo_Bunny","zoo_Deer","zoo_Hedgehog","zoo_Moose","zoo_Pig","zoo_Porkey","zoo_Sheep","zoo_chicken","zoo_elephant","zoo_fish","zoo_frog","zoo_snail","zoo_turtle"}, |
|
470 {"Batty","Tails","Bunny","Deer","Spikes","Horns","Bacon","Porkey","Sheepy","Chicken","Trunks","Fishy","Legs","Slimer","Roshi"}, |
|
471 "FR","cm_hurrah","Default","Bone","Castle" |
|
472 }, |
|
473 |
|
474 { |
|
475 "The Devs", |
|
476 {"ushanka","zoo_Sheep","bb_bob","Skull","poke_mudkip","lambda","WizardHat","sf_ryu","android","fr_lemon","mp3"}, |
|
477 {"unC0Rr", "sheepluva", "nemo", "mikade", "koda", "burp","HeneK","Tiyuri","Xeli","Displacer","szczur"}, |
|
478 "FR","hedgewars","Classic","Statue","Castle" |
|
479 }, |
|
480 |
|
481 { |
|
482 "Mushroom Kingdom", |
|
483 {"sm_daisy","sm_luigi","sm_mario","sm_peach","sm_toad","sm_wario"}, |
|
484 {"Daisy","Luigi","Mario","Princess Peach","Toad","Wario"}, |
|
485 "FR","cm_birdy","Default","Badger","Castle" |
|
486 }, |
|
487 |
|
488 { |
|
489 "Pirates", |
|
490 {"pirate_jack","pirate_jack_bandana"}, |
|
491 {"Rusted Diego","Fuzzy Beard","Al.Kaholic","Morris","Yumme Gunpowder","Cutlass Cain","Jim Morgan","Silver","Dubloon Devil","Ugly Mug","Fair Wind","Scallywag","Salty Dog","Bearded Beast","Timbers","Both Barrels","Jolly Roger"}, |
|
492 "R","cm_pirate","Pirate","chest","Castle" |
|
493 }, |
|
494 |
|
495 { |
|
496 "Gangsters", |
|
497 {"Moustache","Cowboy","anzac","Bandit","thug","Jason","NinjaFull","chef"}, |
|
498 {"The Boss","Jimmy","Frankie","Morris","Mooney","Knives","Tony","Meals"}, |
|
499 "F","cm_anarchy","Mobster","deadhog","Castle" |
|
500 }, |
|
501 |
|
502 |
|
503 { |
|
504 "Twenty-Twenty", |
|
505 {"Glasses","lambda","SunGlasses","Sniper","Terminator_Glasses","Moustache_glasses","doctor","punkman","rasta"}, |
|
506 {"Specs","Speckles","Spectator","Glasses","Glassy","Harry Potter","Goggles","Clark Kent","Goggs","Lightbender","Specs Appeal","Four Eyes"}, |
|
507 "R","cm_face","Default","eyecross","Castle" |
|
508 }, |
|
509 |
|
510 |
|
511 { |
|
512 "Monsters", |
|
513 {"Skull","Jason","ShaggyYeti","Zombi","cyclops","Mummy","hogpharoah","vampirichog"}, |
|
514 {"Bones","Jason","Yeti","Zombie","Old One Eye","Ramesses","Xerxes","Count Hogula"}, |
|
515 "FR","cm_vampire","Default","octopus","Castle" |
|
516 }, |
|
517 |
|
518 { |
|
519 "The Iron Curtain", |
|
520 {"ushanka","war_sovietcomrade1","war_sovietcomrade1","ushanka"}, |
|
521 {"Alex","Sergey","Vladimir","Andrey","Dimitry","Ivan","Oleg","Kostya","Anton","Eugene"}, |
|
522 "R","cm_soviet","Russian","skull","Castle" |
|
523 }, |
|
524 |
|
525 { |
|
526 "Desert Storm", |
|
527 {"war_desertofficer","war_desertgrenadier1","war_desertmedic","war_desertsapper1","war_desertgrenadier2","war_desertgrenadier4","war_desertsapper2","war_desertgrenadier5"}, |
|
528 {"Brigadier Briggs","Lt. Luke","Sgt. Smith","Corporal Calvin","Frank","Joe","Sam","Donald"}, |
|
529 "F","cm_birdy","Default","Grave","Castle" |
|
530 }, |
|
531 |
|
532 --{ |
|
533 --"Sci-Fi", |
|
534 --{"scif_2001O","scif_2001Y","scif_BrainSlug","scif_BrainSlug2","scif_Geordi","scif_SparkssHelmet","scif_cosmonaut","scif_cyberpunk","scif_swDarthvader","scif_swStormtrooper"}, |
|
535 --{}, |
|
536 --"R","cm_birdy","Default","Grave","Castle" |
|
537 --}, |
|
538 |
|
539 |
|
540 |
|
541 |
|
542 -- |
|
543 |
|
544 --{ |
|
545 --, |
|
546 --{}, |
|
547 --{}, |
|
548 --"R","cm_birdy","Default","Grave","Castle" |
|
549 --}, |
|
550 |
|
551 -- don't forget new additions need to be added to: |
|
552 --pMode = {"Clowns","Street Fighters","Cybernetic Empire","Color Squad","Fruit","The Police","The Ninja-Samurai Alliance","Pokemon","The Zoo","The Devs","The Hospital"} |
|
553 -- but maybe we can just get the size of this array and automatically generate a list instead |
|
554 |
|
555 |
|
556 { |
|
557 "The Hospital", |
|
558 {"doctor","nurse","war_britmedic","war_desertmedic","war_germanww2medic"}, |
|
559 {"Dr. Blackwell","Dr. Drew","Dr. Harvey","Dr. Crushing","Dr. Jenner","Dr. Barnard","Dr. Parkinson","Dr. Banting","Dr. Horace","Dr. Hollows","Dr. Jung"}, |
|
560 "R","cm_birdy","Default","heart","Castle" |
|
561 } |
|
562 |
|
563 } |
|
564 |
|
565 |
|
566 --local menuArray = { |
|
567 -- "Initialisation Menu", "Team Menu" |
|
568 -- } |
|
569 |
|
570 --local hatArray = {hahahaha, you're joking, right?} |
|
571 --[[well, here are most of them as vaguely ordered by theme, there may be some duplicates |
|
572 NoHat, |
|
573 NinjaFull,NinjaStraight,NinjaTriangle,Samurai,StrawHat,StrawHatEyes,StrawHatFacial,naruto |
|
574 sm_daisy,sm_luigi,sm_mario,sm_peach,sm_toad,sm_wario, |
|
575 ShortHair_Black,ShortHair_Brown,ShortHair_Grey,ShortHair_Red,ShortHair_Yellow |
|
576 hair_blue,hair_green,hair_red,hair_yellow,hair_purple,hair_grey,hair_orange,hair_pink |
|
577 Skull,Jason,ShaggyYeti,Zombi,cyclops,Mummy,hogpharoah,vampirichog |
|
578 cap_blue,cap_red,cap_green,cap_junior,cap_yellow,cap_thinking |
|
579 WhySoSerious,clown-copper,clown-crossed,clown,Joker |
|
580 bobby,bobby2v,policecap,policegirl,royalguard, |
|
581 spcartman,spstan,spkenny,spkyle, |
|
582 sf_balrog,sf_blanka,sf_blankatoothless,sf_chunli,sf_guile,sf_honda,sf_ken,sf_ryu,sf_vega |
|
583 Glasses,lambda,SunGlasses,Terminator_Glasses,Moustache_glasses |
|
584 Laminaria,Dragon, |
|
585 cyborg1,cyborg2, |
|
586 dish_Ladle,dish_SauceBoatSilver,dish_Teacup,dish_Teapot |
|
587 laurel,flag_french,flag_germany,flag_italy,flag_usa |
|
588 fr_apple,fr_banana,fr_lemon,fr_orange,fr_pumpkin,fr_tomato |
|
589 doctor,nurse,war_britmedic,war_desertmedic,war_germanww2medic, |
|
590 poke_ash,poke_charmander,poke_chikorita,poke_jigglypuff, |
|
591 poke_lugia,poke_mudkip,poke_pikachu,poke_slowpoke,poke_squirtle,poke_voltorb |
|
592 zoo_Bat,zoo_Beaver,zoo_Bunny,zoo_Deer,zoo_Hedgehog,zoo_Moose,zoo_Pig,zoo_Porkey,zoo_Sheep |
|
593 zoo_chicken,zoo_elephant,zoo_fish,zoo_frog,zoo_snail,zoo_turtle |
|
594 bushhider,cratehider,Disguise, |
|
595 tf_demoman,tf_scout,Sniper, |
|
596 Bandit,thug,anzac,Cowboy |
|
597 pirate_jack,pirate_jack_bandana, |
|
598 tiara,crown,royalguard |
|
599 punkman,Einstein, |
|
600 sth_Amy,sth_AmyClassic,sth_Eggman,sth_Knux,sth_Metal,sth_Shadow,sth_Sonic,sth_SonicClassic,sth_Super,sth_Tails |
|
601 vc_gakupo,vc_gumi,vc_kaito,vc_len,vc_luka,vc_meiko,vc_miku,vc_rin |
|
602 touhou_chen,touhou_marisa,touhou_patchouli,touhou_remelia,touhou_suwako,touhou_yukari, |
|
603 TeamHeadband,TeamSoldier,TeamTopHat,TeamWheatley,cap_team,hair_team, |
|
604 bb_bob,bb_bub,bb_cororon,bb_kululun,bubble, |
|
605 Viking,spartan,swordsmensquire,knight,dwarf, |
|
606 WizardHat,tophats,pinksunhat,ushanka,mexicansunbrero,HogInTheHat, |
|
607 4gsuif, |
|
608 AkuAku, |
|
609 noface, |
|
610 Coonskin3, |
|
611 Dan, |
|
612 Dauber, |
|
613 Eva_00b,Eva_00y, |
|
614 Evil,InfernalHorns,angel, |
|
615 Gasmask, |
|
616 IndianChief,Cowboy, |
|
617 MegaHogX, |
|
618 Meteorhelmet, |
|
619 Moustache, |
|
620 OldMan, |
|
621 Pantsu, |
|
622 Plunger, |
|
623 RSR, |
|
624 Rain,stormcloud,DayAndNight, |
|
625 chuckl,Rambo,RobinHood, |
|
626 Santa,snowhog,ShaggyYeti,eastertop, |
|
627 Sleepwalker, |
|
628 SparkleSuperFun, |
|
629 SunWukong, |
|
630 android, |
|
631 beefeater, |
|
632 car, |
|
633 chef, |
|
634 constructor, |
|
635 footballhelmet, |
|
636 judo, |
|
637 lamp, |
|
638 mechanicaltoy, |
|
639 mickey_ears, |
|
640 snorkel, |
|
641 quotecap, |
|
642 rasta, |
|
643 |
|
644 metalband, |
|
645 kiss_criss,kiss_frehley,kiss_simmons,kiss_stanley,mp3,Elvis |
|
646 mv_Spidey,mv_Venom, |
|
647 ntd_Falcon,ntd_Kirby,ntd_Link,ntd_Samus, |
|
648 scif_2001O,scif_2001Y,scif_BrainSlug,scif_BrainSlug2,scif_Geordi,scif_SparkssHelmet, |
|
649 scif_cosmonaut,scif_cyberpunk,scif_swDarthvader,scif_swStormtrooper, |
|
650 war_UNPeacekeeper01,war_UNPeacekeeper02, |
|
651 war_airwarden02,war_airwarden03, |
|
652 war_americanww2helmet, |
|
653 war_britmedic,war_britpthhelmet,war_britsapper, |
|
654 war_desertgrenadier1,war_desertgrenadier2,war_desertgrenadier4,war_desertgrenadier5,war_desertmedic, |
|
655 war_desertofficer,war_desertsapper1,war_desertsapper2, |
|
656 war_frenchww1gasmask,war_frenchww1helmet, |
|
657 war_germanww1helmet2,war_germanww1tankhelm,war_germanww2medic,war_germanww2pith, |
|
658 war_grenadier1,war_trenchgrenadier1,war_trenchgrenadier2,war_trenchgrenadier3, |
|
659 war_plainpith, |
|
660 war_sovietcomrade1,war_sovietcomrade2, |
|
661 war_trenchfrench01,war_trenchfrench02,]] |
|
662 |
|
663 local colorArray = { |
|
664 --{0xff0000ff, "0xff0000ff", "Red"}, -- look up hw red |
|
665 {0xff4980c1, "0xff4980c1", "Blue"}, |
|
666 {0xff1de6ba, "0xff1de6ba", "Teal"}, |
|
667 {0xffb541ef, "0xffb541ef", "Purple"}, |
|
668 {0xffe55bb0, "0xffe55bb0", "Pink"}, |
|
669 {0xff20bf00, "0xff20bf00", "Green"}, |
|
670 {0xfffe8b0e, "0xfffe8b0e", "Orange"}, |
|
671 {0xff5f3605, "0xff5f3605", "Brown"}, |
|
672 {0xffffff01, "0xffffff01", "Yellow"} |
|
673 } |
|
674 |
|
675 local graveArray = { |
|
676 "Badger", "Bone", "bp2", "bubble", "Cherry", |
|
677 "chest", "coffin", "deadhog", "dragonball", "Duck2", |
|
678 "Earth", "Egg", "eyecross", "Flower", "Ghost", |
|
679 "Grave", "heart", "money", "mouton1", "octopus", |
|
680 "plant2", "plant3", "Plinko", "pokeball", "pyramid", |
|
681 "ring", "Rip", "Rubberduck", "Simple", "skull", |
|
682 "star", "Status" |
|
683 } |
|
684 |
|
685 local voiceArray = { |
|
686 "British","Classic","Default","Default_es","Default_uk", |
|
687 "HillBilly","Mobster","Pirate","Robot","Russian","Singer", |
|
688 "Surfer" |
|
689 } |
|
690 |
|
691 local fortArray = { |
|
692 "Cake", "Castle", "Earth", "EvilChicken", "Flowerhog", |
|
693 "Hydrant", "Lego", "Plane", "Statue", "Tank", |
|
694 "UFO", "Wood" |
|
695 } |
|
696 |
|
697 -- non-exhaustive list of flags, feel free to choose others |
|
698 local flagArray = { |
|
699 "cm_binary", "cm_birdy", "cm_earth", "cm_pirate", "cm_star", |
|
700 "cm_hurrah", "cm_hax0r", "cm_balrog", "cm_spider", "cm_eyeofhorus" |
|
701 } |
|
702 |
|
703 local gameFlagList = { |
|
704 {"gfForts", false, gfForts}, |
|
705 {"gfMultiWeapon", false, gfMultiWeapon}, |
|
706 {"gfBorder", false, gfBorder}, |
|
707 {"gfSolidLand", false, gfSolidLand}, |
|
708 {"gfDivideTeams", false, gfDivideTeams}, |
|
709 {"gfLowGravity", false, gfLowGravity}, |
|
710 {"gfLaserSight", true, gfLaserSight}, |
|
711 {"gfInvulnerable", false, gfInvulnerable}, |
|
712 {"gfMines", false, gfMines}, |
|
713 {"gfVampiric", false, gfVampiric}, |
|
714 {"gfKarma", false, gfKarma}, |
|
715 {"gfArtillery", false, gfArtillery}, |
|
716 {"gfOneClanMode", false, gfOneClanMode}, |
|
717 {"gfRandomOrder", false, gfRandomOrder}, |
|
718 {"gfKing", false, gfKing}, |
|
719 {"gfPlaceHog", false, gfPlaceHog}, |
|
720 {"gfSharedAmmo", false, gfSharedAmmo}, |
|
721 {"gfDisableGirders", false, gfDisableGirders}, |
|
722 {"gfExplosives", false, gfExplosives}, |
|
723 {"gfDisableLandObjects", false, gfDisableLandObjects}, |
|
724 {"gfAISurvival", false, gfAISurvival}, |
|
725 {"gfInfAttack", true, gfInfAttack}, |
|
726 {"gfResetWeps", false, gfResetWeps}, |
|
727 {"gfResetHealth", false, gfResetHealth}, |
|
728 {"gfPerHogAmmo", false, gfPerHogAmmo}, |
|
729 {"gfDisableWind", false, gfDisableWind}, |
|
730 {"gfMoreWind", false, gfMoreWind}, |
|
731 {"gfTagTeam", false, gfTagTeam} |
|
732 } |
|
733 |
|
734 local themeList = {"Art", "Bamboo", "Bath", --[["Blox",]] "Brick", "Cake", "Castle", "Cave", "Cheese", |
|
735 "Christmas", "City", "Compost", --[["CrazyMission", "Deepspace",]] "Desert", "Earthrise", |
|
736 --[["Eyes",]] "Freeway", "Golf", "Halloween", "Hell", --[["HogggyWood",]] "Island", "Jungle", "Nature", |
|
737 "Olympics", "Planes", "Sheep", "Snow", "Stage", "Underwater" |
|
738 } |
|
739 |
|
740 local mapList = { |
|
741 "Bamboo", "BambooPlinko", "Basketball", "Bath", "Blizzard", "Blox", "Bubbleflow", |
|
742 "Battlefield", "Cake", "Castle", "Cave", "Cheese", "Cogs", "Control", "Earthrise", |
|
743 "Eyes", "Hammock", "Hedgelove", "Hedgewars", "Hogville", "Hydrant", "Islands", |
|
744 "Knockball", "Lonely_Island", "Mushrooms", "Octorama", "PirateFlag", |
|
745 "Plane", "Ropes", "Ruler", "Sheep", "ShoppaKing", "Sticks", "Trash", "Tree", |
|
746 "TrophyRace" |
|
747 } |
|
748 |
|
749 --local spriteArray = { |
|
750 -- {sprBigDigit, "sprBigDigit", 0} |
|
751 -- } |
|
752 |
|
753 local spriteIDArray = {sprWater, sprCloud, sprBomb, sprBigDigit, sprFrame, |
|
754 sprLag, sprArrow, sprBazookaShell, sprTargetP, sprBee, |
|
755 sprSmokeTrace, sprRopeHook, sprExplosion50, sprMineOff, |
|
756 sprMineOn, sprMineDead, sprCase, sprFAid, sprDynamite, sprPower, |
|
757 sprClusterBomb, sprClusterParticle, sprFlame, |
|
758 sprHorizont, sprHorizontL, sprHorizontR, sprSky, sprSkyL, sprSkyR, |
|
759 sprAMSlot, sprAMAmmos, sprAMAmmosBW, sprAMSlotKeys, sprAMCorners, |
|
760 sprFinger, sprAirBomb, sprAirplane, sprAmAirplane, sprAmGirder, |
|
761 sprHHTelepMask, sprSwitch, sprParachute, sprTarget, sprRopeNode, |
|
762 sprQuestion, sprPowerBar, sprWindBar, sprWindL, sprWindR, |
|
763 |
|
764 sprFireButton, sprArrowUp, sprArrowDown, sprArrowLeft, sprArrowRight, |
|
765 sprJumpWidget, sprAMWidget, sprPauseButton, sprTimerButton, sprTargetButton, |
|
766 |
|
767 sprFlake, sprHandRope, sprHandBazooka, sprHandShotgun, |
|
768 sprHandDEagle, sprHandAirAttack, sprHandBaseball, sprPHammer, |
|
769 sprHandBlowTorch, sprBlowTorch, sprTeleport, sprHHDeath, |
|
770 sprShotgun, sprDEagle, sprHHIdle, sprMortar, sprTurnsLeft, |
|
771 sprKamikaze, sprWhip, sprKowtow, sprSad, sprWave, |
|
772 sprHurrah, sprLemonade, sprShrug, sprJuggle, sprExplPart, sprExplPart2, |
|
773 sprCakeWalk, sprCakeDown, sprWatermelon, |
|
774 sprEvilTrace, sprHellishBomb, sprSeduction, sprDress, |
|
775 sprCensored, sprDrill, sprHandDrill, sprHandBallgun, sprBalls, |
|
776 sprPlane, sprHandPlane, sprUtility, sprInvulnerable, sprVampiric, sprGirder, |
|
777 sprSpeechCorner, sprSpeechEdge, sprSpeechTail, |
|
778 sprThoughtCorner, sprThoughtEdge, sprThoughtTail, |
|
779 sprShoutCorner, sprShoutEdge, sprShoutTail, |
|
780 sprSniperRifle, sprBubbles, sprJetpack, sprHealth, sprHandMolotov, sprMolotov, |
|
781 sprSmoke, sprSmokeWhite, sprShell, sprDust, sprSnowDust, sprExplosives, sprExplosivesRoll, |
|
782 sprAmTeleport, sprSplash, sprDroplet, sprBirdy, sprHandCake, sprHandConstruction, |
|
783 sprHandGrenade, sprHandMelon, sprHandMortar, sprHandSkip, sprHandCluster, |
|
784 sprHandDynamite, sprHandHellish, sprHandMine, sprHandSeduction, sprHandVamp, |
|
785 sprBigExplosion, sprSmokeRing, sprBeeTrace, sprEgg, sprTargetBee, sprHandBee, |
|
786 sprFeather, sprPiano, sprHandSineGun, sprPortalGun, sprPortal, |
|
787 sprCheese, sprHandCheese, sprHandFlamethrower, sprChunk, sprNote, |
|
788 sprSMineOff, sprSMineOn, sprHandSMine, sprHammer, |
|
789 sprHandResurrector, sprCross, sprAirDrill, sprNapalmBomb, |
|
790 sprBulletHit, sprSnowball, sprHandSnowball, sprSnow, |
|
791 sprSDFlake, sprSDWater, sprSDCloud, sprSDSplash, sprSDDroplet, sprTardis, |
|
792 sprSlider, sprBotlevels, sprHandKnife, sprKnife, sprStar, sprIceTexture, sprIceGun, sprFrozenHog, sprAmRubber, sprBoing} |
|
793 |
|
794 |
|
795 local spriteTextArray = {"sprWater", "sprCloud", "sprBomb", "sprBigDigit", "sprFrame", |
|
796 "sprLag", "sprArrow", "sprBazookaShell", "sprTargetP", "sprBee", |
|
797 "sprSmokeTrace", "sprRopeHook", "sprExplosion50", "sprMineOff", |
|
798 "sprMineOn", "sprMineDead", "sprCase", "sprFAid", "sprDynamite", "sprPower", |
|
799 "sprClusterBomb", "sprClusterParticle", "sprFlame", "sprHorizont", |
|
800 "sprHorizontL", "sprHorizontR", "sprSky", "sprSkyL", "sprSkyR", "sprAMSlot", |
|
801 "sprAMAmmos", "sprAMAmmosBW", "sprAMSlotKeys", "sprAMCorners", "sprFinger", |
|
802 "sprAirBomb", "sprAirplane", "sprAmAirplane", "sprAmGirder", "sprHHTelepMask", |
|
803 "sprSwitch", "sprParachute", "sprTarget", "sprRopeNode", "sprQuestion", |
|
804 "sprPowerBar", "sprWindBar", "sprWindL", "sprWindR", "sprFireButton", |
|
805 "sprArrowUp", "sprArrowDown", "sprArrowLeft", "sprArrowRight", "sprJumpWidget", |
|
806 "sprAMWidget", "sprPauseButton", "sprTimerButton", "sprTargetButton", |
|
807 "sprFlake", "sprHandRope", "sprHandBazooka", "sprHandShotgun", |
|
808 "sprHandDEagle", "sprHandAirAttack", "sprHandBaseball", "sprPHammer", |
|
809 "sprHandBlowTorch", "sprBlowTorch", "sprTeleport", "sprHHDeath", "sprShotgun", |
|
810 "sprDEagle", "sprHHIdle", "sprMortar", "sprTurnsLeft", "sprKamikaze", "sprWhip", |
|
811 "sprKowtow", "sprSad", "sprWave", "sprHurrah", "sprLemonade", "sprShrug", |
|
812 "sprJuggle", "sprExplPart", "sprExplPart2", "sprCakeWalk", "sprCakeDown", |
|
813 "sprWatermelon", "sprEvilTrace", "sprHellishBomb", "sprSeduction", "sprDress", |
|
814 "sprCensored", "sprDrill", "sprHandDrill", "sprHandBallgun", "sprBalls", "sprPlane", |
|
815 "sprHandPlane", "sprUtility", "sprInvulnerable", "sprVampiric", "sprGirder", |
|
816 "sprSpeechCorner", "sprSpeechEdge", "sprSpeechTail", "sprThoughtCorner", |
|
817 "sprThoughtEdge", "sprThoughtTail", "sprShoutCorner", "sprShoutEdge", |
|
818 "sprShoutTail", "sprSniperRifle", "sprBubbles", "sprJetpack", "sprHealth", |
|
819 "sprHandMolotov", "sprMolotov", "sprSmoke", "sprSmokeWhite", "sprShell", "sprDust", |
|
820 "sprSnowDust", "sprExplosives", "sprExplosivesRoll", "sprAmTeleport", "sprSplash", |
|
821 "sprDroplet", "sprBirdy", "sprHandCake", "sprHandConstruction", "sprHandGrenade", |
|
822 "sprHandMelon", "sprHandMortar", "sprHandSkip", "sprHandCluster", "sprHandDynamite", |
|
823 "sprHandHellish", "sprHandMine", "sprHandSeduction", "sprHandVamp", "sprBigExplosion", |
|
824 "sprSmokeRing", "sprBeeTrace", "sprEgg", "sprTargetBee", "sprHandBee", "sprFeather", |
|
825 "sprPiano", "sprHandSineGun", "sprPortalGun", "sprPortal", "sprCheese", "sprHandCheese", |
|
826 "sprHandFlamethrower", "sprChunk", "sprNote", "sprSMineOff", "sprSMineOn", "sprHandSMine", |
|
827 "sprHammer", "sprHandResurrector", "sprCross", "sprAirDrill", "sprNapalmBomb", "sprBulletHit", |
|
828 "sprSnowball", "sprHandSnowball", "sprSnow", "sprSDFlake", "sprSDWater", "sprSDCloud", |
|
829 "sprSDSplash", "sprSDDroplet", "sprTardis", "sprSlider", "sprBotlevels", "sprHandKnife", |
|
830 "sprKnife", "sprStar", "sprIceTexture", "sprIceGun", "sprFrozenHog", "sprAmRubber", "sprBoing"} |
|
831 |
|
832 local reducedSpriteIDArray = { |
|
833 sprBigDigit, sprTarget, sprKowtow, sprBee, sprAmGirder, sprExplosion50, sprGirder,sprCustom1,sprCustom2 |
|
834 } |
|
835 |
|
836 local reducedSpriteTextArray = { |
|
837 "sprBigDigit", "sprTarget", "sprKowtow", "sprBee", "sprAmGirder", "sprExplosion50", "sprGirder","sprCustom1","sprCustom2" |
|
838 } |
|
839 |
|
840 ---------------------------- |
|
841 -- placement shite |
|
842 ---------------------------- |
|
843 |
|
844 local landType = 0 |
|
845 local superDelete = false |
|
846 local ufoGear = nil |
|
847 ufoFuel = 0 |
|
848 mapID = 1 |
|
849 local portalDistance = 5000/5 |
|
850 local helpDisabled = false --determines whether help popups pop up |
|
851 local CG = nil -- this is the visual gear displayed at CursorX, CursorY |
|
852 local crateSprite = nil-- this is a visual gear aid for crate placement |
|
853 local tSpr = {} |
|
854 |
|
855 local cGear = nil -- detects placement of girders and objects (using airattack) |
|
856 local curWep = amNothing |
|
857 local leftHeld = false |
|
858 local rightHeld = false |
|
859 local preciseOn = false |
|
860 |
|
861 -- primary placement categories |
|
862 local cIndex = 1 -- category index |
|
863 local cat = { |
|
864 loc("Girder Placement Mode"), |
|
865 loc("Rubber Placement Mode"), |
|
866 loc("Mine Placement Mode"), |
|
867 loc("Sticky Mine Placement Mode"), |
|
868 loc("Air Mine Placement Mode"), |
|
869 loc("Barrel Placement Mode"), |
|
870 loc("Health Crate Placement Mode"), |
|
871 loc("Weapon Crate Placement Mode"), |
|
872 loc("Utility Crate Placement Mode"), |
|
873 loc("Target Placement Mode"), |
|
874 loc("Cleaver Placement Mode"), |
|
875 loc("Advanced Repositioning Mode"), |
|
876 loc("Tagging Mode"), |
|
877 loc("Hog Identity Mode"), |
|
878 loc("Team Identity Mode"), |
|
879 loc("Health Modification Mode"), |
|
880 --loc("Sprite Testing Mode"), |
|
881 loc("Sprite Placement Mode"), |
|
882 loc("Sprite Modification Mode"), |
|
883 loc("Waypoint Placement Mode") |
|
884 } |
|
885 |
|
886 |
|
887 local pMode = {} -- pMode contains custom subsets of the main categories |
|
888 local pIndex = 1 |
|
889 |
|
890 local genTimer = 0 |
|
891 |
|
892 local CGR = 1 -- current girder rotation, we actually need this as HW remembers what rotation you last used |
|
893 |
|
894 local placedX = {} -- x coord of placed object |
|
895 local placedY = {} -- y coord of placed object |
|
896 local placedSpec = {} -- this is different depending on what was placed, for mines it is their time, for crates it is their content, (for girders/rubbers it used to be their rotation, and for sprites, their name, but this has been moved to different variables to allow more complex / smooth editing) |
|
897 --local placedSuperSpec = {} -- used to be used by girders/rubbers/sprites for their landFlag |
|
898 local placedType = {} -- what kind of object was placed: mine, crate, girder, rubber, barrel, etc. |
|
899 |
|
900 local placedTint = {} -- only girders/rubbers/sprites use this, it is their tint / colouration |
|
901 local placedSprite = {} -- what sprite was placed |
|
902 local placedFrame = {} -- what frame of sprite was placed (rotation for girders / rubber) |
|
903 local placedLandFlags = {} |
|
904 local placedHWMapFlag = {} -- this is what HWMapConverter uses |
|
905 local placedCount = 0 -- do we really need this? |
|
906 |
|
907 local sSprite -- sprite overlay that glows to show selected sprites |
|
908 local sCirc -- circle that appears around selected gears |
|
909 local sGear = nil |
|
910 local closestDist |
|
911 local closestGear = nil |
|
912 local closestSpriteID = nil |
|
913 |
|
914 ------------------------ |
|
915 -- menu shite (more or less unused currently) |
|
916 ------------------------ |
|
917 --local menuEnabled = false |
|
918 --local menuIndex = 1 |
|
919 --local menu = {} |
|
920 --local subMenu = {} |
|
921 --local sMI = 1 -- sub menu index |
|
922 --local preMenuCfg |
|
923 --local postMenuCfg |
|
924 --local initMenu = { |
|
925 -- {"Selected Menu", "Initialisation Menu"}, |
|
926 -- {"List of Gameflags", ""}, |
|
927 -- {"List of Gameflags", ""} |
|
928 -- } |
|
929 |
|
930 ------------------------ |
|
931 -- SOME GENERAL METHODS |
|
932 ------------------------ |
|
933 |
|
934 function BoolToString(boo) |
|
935 if boo == true then |
|
936 return("true") |
|
937 else |
|
938 return("false") |
|
939 end |
|
940 end |
|
941 |
|
942 function GetDistFromGearToXY(gear, g2X, g2Y) |
|
943 |
|
944 g1X, g1Y = GetGearPosition(gear) |
|
945 q = g1X - g2X |
|
946 w = g1Y - g2Y |
|
947 |
|
948 return ( (q*q) + (w*w) ) |
|
949 |
|
950 end |
|
951 |
|
952 ------------------------------------------------------------ |
|
953 -- STUFF FOR LOADING SPECIAL POINTS / HWMAP CONVERSION |
|
954 ------------------------------------------------------------ |
|
955 |
|
956 local specialPointsX = {} |
|
957 local specialPointsY = {} |
|
958 local specialPointsFlag = {} |
|
959 local specialPointsCount = 0 |
|
960 |
|
961 function onSpecialPoint(x,y,flag) |
|
962 specialPointsX[specialPointsCount] = x |
|
963 specialPointsY[specialPointsCount] = y |
|
964 specialPointsFlag[specialPointsCount] = flag |
|
965 specialPointsCount = specialPointsCount + 1 |
|
966 end |
|
967 |
|
968 -- you know you could probably add multiple layers to this to get more points |
|
969 -- after the first set is expended have the last 1 be 127 |
|
970 -- and then increment some other counter so like |
|
971 |
|
972 -- bobCounter = 1 |
|
973 -- specialPoint(5) |
|
974 -- specialPoint(127) |
|
975 -- specialPoint(5) |
|
976 |
|
977 -- if BobCounter = 1 then |
|
978 -- if specialPointsFlag == 5 then createMine |
|
979 -- if specialPointFlag == 127 then bobCounter = 2 |
|
980 -- elseif bobCounter == 2 then |
|
981 -- if specialPointsFlag == 5 then createExlosives |
|
982 -- end |
|
983 -- |
|
984 |
|
985 -- this function interprets special points that have been embedded into an HWPMAP |
|
986 function InterpretPoints() |
|
987 |
|
988 -- flags run from 0 to 127 |
|
989 for i = 0, (specialPointsCount-1) do |
|
990 |
|
991 -- Mines |
|
992 if specialPointsFlag[i] == 1 then |
|
993 SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 1) |
|
994 elseif specialPointsFlag[i] == 2 then |
|
995 SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 1000) |
|
996 elseif specialPointsFlag[i] == 3 then |
|
997 SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 2000) |
|
998 elseif specialPointsFlag[i] == 4 then |
|
999 SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 3000) |
|
1000 elseif specialPointsFlag[i] == 5 then |
|
1001 SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 4000) |
|
1002 elseif specialPointsFlag[i] == 6 then |
|
1003 SetTimer(AddGear(specialPointsX[i], specialPointsY[i], gtMine, 0, 0, 0, 0), 5000) |
|
1004 |
|
1005 -- Sticky Mines |
|
1006 elseif specialPointsFlag[i] == 7 then |
|
1007 AddGear(specialPointsX[i], specialPointsY[i], gtSMine, 0, 0, 0, 0) |
|
1008 |
|
1009 -- Air Mines |
|
1010 elseif specialPointsFlag[i] == 8 then |
|
1011 AddGear(specialPointsX[i], specialPointsY[i], gtAirMine, 0, 0, 0, 0) |
|
1012 |
|
1013 -- Health Crates |
|
1014 elseif specialPointsFlag[i] == 9 then |
|
1015 SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),25) |
|
1016 elseif specialPointsFlag[i] == 10 then |
|
1017 SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),50) |
|
1018 elseif specialPointsFlag[i] == 11 then |
|
1019 SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),75) |
|
1020 elseif specialPointsFlag[i] == 12 then |
|
1021 SetHealth(SpawnHealthCrate(specialPointsX[i],specialPointsY[i]),100) |
|
1022 |
|
1023 -- Cleaver |
|
1024 elseif specialPointsFlag[i] == 13 then |
|
1025 AddGear(specialPointsX[i], specialPointsY[i], gtKnife, 0, 0, 0, 0) |
|
1026 |
|
1027 -- Target |
|
1028 elseif specialPointsFlag[i] == 14 then |
|
1029 AddGear(specialPointsX[i], specialPointsY[i], gtTarget, 0, 0, 0, 0) |
|
1030 |
|
1031 --Barrels |
|
1032 elseif specialPointsFlag[i] == 15 then |
|
1033 SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),1) |
|
1034 elseif specialPointsFlag[i] == 16 then |
|
1035 SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),25) |
|
1036 elseif specialPointsFlag[i] == 17 then |
|
1037 SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),50) |
|
1038 elseif specialPointsFlag[i] == 18 then |
|
1039 SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),75) |
|
1040 elseif specialPointsFlag[i] == 19 then |
|
1041 SetHealth(AddGear(specialPointsX[i], specialPointsY[i], gtExplosives, 0, 0, 0, 0),100) |
|
1042 |
|
1043 -- There are about 58+- weps / utils |
|
1044 -- Weapon Crates |
|
1045 elseif (specialPointsFlag[i] >= 20) and (specialPointsFlag[i] < (#atkArray+20)) then |
|
1046 tempG = SpawnAmmoCrate(specialPointsX[i],specialPointsY[i],atkArray[specialPointsFlag[i]-19][1]) |
|
1047 setGearValue(tempG,"caseType","ammo") |
|
1048 setGearValue(tempG,"contents",atkArray[specialPointsFlag[i]-19][2]) |
|
1049 |
|
1050 |
|
1051 -- Utility Crates |
|
1052 elseif (specialPointsFlag[i] >= (#atkArray+20)) and (specialPointsFlag[i] < (#atkArray+20+#utilArray)) then |
|
1053 tempG = SpawnUtilityCrate(specialPointsX[i],specialPointsY[i],utilArray[specialPointsFlag[i]-19-#atkArray][1]) |
|
1054 setGearValue(tempG,"caseType","util") |
|
1055 setGearValue(tempG,"contents",utilArray[specialPointsFlag[i]-19-#atkArray][2]) |
|
1056 |
|
1057 --79-82 (reserved for future wep crates) |
|
1058 --89,88,87,86 and 85,84,83,82 (reserved for the 2 custom sprites and their landflags) |
|
1059 |
|
1060 --90-99 reserved for scripted structures |
|
1061 --[[elseif specialPointsFlag[i] == 90 then |
|
1062 --PlaceStruc("generator") |
|
1063 elseif specialPointsFlag[i] == 91 then |
|
1064 --PlaceStruc("healingstation") |
|
1065 elseif specialPointsFlag[i] == 92 then |
|
1066 --PlaceStruc("respawner") |
|
1067 elseif specialPointsFlag[i] == 93 then |
|
1068 --PlaceStruc("teleportationnode") |
|
1069 elseif specialPointsFlag[i] == 94 then |
|
1070 --PlaceStruc("biofilter") |
|
1071 elseif specialPointsFlag[i] == 95 then |
|
1072 --PlaceStruc("supportstation") |
|
1073 elseif specialPointsFlag[i] == 96 then |
|
1074 --PlaceStruc("constructionstation") |
|
1075 elseif specialPointsFlag[i] == 97 then |
|
1076 --PlaceStruc("reflectorshield") |
|
1077 elseif specialPointsFlag[i] == 98 then |
|
1078 --PlaceStruc("weaponfilter")]] |
|
1079 |
|
1080 elseif specialPointsFlag[i] == 98 then |
|
1081 portalDistance = div(specialPointsX[i],5) |
|
1082 ufoFuel = specialPointsY[i] |
|
1083 |
|
1084 -- Normal Girders |
|
1085 elseif specialPointsFlag[i] == 100 then |
|
1086 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 0, 4294967295, nil, nil, nil, lfNormal) |
|
1087 elseif specialPointsFlag[i] == 101 then |
|
1088 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 1, 4294967295, nil, nil, nil, lfNormal) |
|
1089 elseif specialPointsFlag[i] == 102 then |
|
1090 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 2, 4294967295, nil, nil, nil, lfNormal) |
|
1091 elseif specialPointsFlag[i] == 103 then |
|
1092 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 3, 4294967295, nil, nil, nil, lfNormal) |
|
1093 elseif specialPointsFlag[i] == 104 then |
|
1094 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 4, 4294967295, nil, nil, nil, lfNormal) |
|
1095 elseif specialPointsFlag[i] == 105 then |
|
1096 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 5, 4294967295, nil, nil, nil, lfNormal) |
|
1097 elseif specialPointsFlag[i] == 106 then |
|
1098 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 6, 4294967295, nil, nil, nil, lfNormal) |
|
1099 elseif specialPointsFlag[i] == 107 then |
|
1100 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 7, 4294967295, nil, nil, nil, lfNormal) |
|
1101 |
|
1102 -- Invulnerable Girders |
|
1103 elseif specialPointsFlag[i] == 108 then |
|
1104 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 0, 2516582650, nil, nil, nil, lfIndestructible) |
|
1105 elseif specialPointsFlag[i] == 109 then |
|
1106 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 1, 2516582650, nil, nil, nil, lfIndestructible) |
|
1107 elseif specialPointsFlag[i] == 110 then |
|
1108 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 2, 2516582650, nil, nil, nil, lfIndestructible) |
|
1109 elseif specialPointsFlag[i] == 111 then |
|
1110 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 3, 2516582650, nil, nil, nil, lfIndestructible) |
|
1111 elseif specialPointsFlag[i] == 112 then |
|
1112 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 4, 2516582650, nil, nil, nil, lfIndestructible) |
|
1113 elseif specialPointsFlag[i] == 113 then |
|
1114 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 5, 2516582650, nil, nil, nil, lfIndestructible) |
|
1115 elseif specialPointsFlag[i] == 114 then |
|
1116 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 6, 2516582650, nil, nil, nil, lfIndestructible) |
|
1117 elseif specialPointsFlag[i] == 115 then |
|
1118 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 7, 2516582650, nil, nil, nil, lfIndestructible) |
|
1119 |
|
1120 -- Icy Girders |
|
1121 elseif specialPointsFlag[i] == 116 then |
|
1122 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 0, 16448250, nil, nil, nil, lfIce) |
|
1123 elseif specialPointsFlag[i] == 117 then |
|
1124 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 1, 16448250, nil, nil, nil, lfIce) |
|
1125 elseif specialPointsFlag[i] == 118 then |
|
1126 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 2, 16448250, nil, nil, nil, lfIce) |
|
1127 elseif specialPointsFlag[i] == 119 then |
|
1128 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 3, 16448250, nil, nil, nil, lfIce) |
|
1129 elseif specialPointsFlag[i] == 120 then |
|
1130 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 4, 16448250, nil, nil, nil, lfIce) |
|
1131 elseif specialPointsFlag[i] == 121 then |
|
1132 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 5, 16448250, nil, nil, nil, lfIce) |
|
1133 elseif specialPointsFlag[i] == 121 then |
|
1134 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 6, 16448250, nil, nil, nil, lfIce) |
|
1135 elseif specialPointsFlag[i] == 123 then |
|
1136 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmGirder, 7, 16448250, nil, nil, nil, lfIce) |
|
1137 |
|
1138 -- Rubber Bands |
|
1139 elseif specialPointsFlag[i] == 124 then |
|
1140 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 0, 4294967295, nil, nil, nil, lfBouncy) |
|
1141 elseif specialPointsFlag[i] == 125 then |
|
1142 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 1, 4294967295, nil, nil, nil, lfBouncy) |
|
1143 elseif specialPointsFlag[i] == 126 then |
|
1144 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 2, 4294967295, nil, nil, nil, lfBouncy) |
|
1145 elseif specialPointsFlag[i] == 127 then |
|
1146 PlaceSprite(specialPointsX[i], specialPointsY[i], sprAmRubber, 3, 4294967295, nil, nil, nil, lfBouncy) |
|
1147 |
|
1148 -- Waypoints |
|
1149 else -- 0 / no value |
|
1150 PlaceWaypoint(specialPointsX[i],specialPointsY[i]) |
|
1151 end |
|
1152 |
|
1153 end |
|
1154 |
|
1155 end |
|
1156 |
|
1157 ---------------------------- |
|
1158 -- just fucking around |
|
1159 ---------------------------- |
|
1160 -- ancient stuff that no longer has any relevance |
|
1161 --[[ |
|
1162 function BoostVeloctiy(gear) |
|
1163 |
|
1164 if (GetGearType(gear) == gtSMine) or |
|
1165 (GetGearType(gear) == gtMine) or |
|
1166 (GetGearType(gear) == gtHedgehog) then |
|
1167 |
|
1168 dx,dy = GetGearVelocity(gear) |
|
1169 SetGearVelocity(gear,dx*1.5,dy*1.5) |
|
1170 end |
|
1171 |
|
1172 end |
|
1173 |
|
1174 -- use this stuff when you want to get some idea of land and/or blow up /everything/ |
|
1175 function CheckGrenades(gear) |
|
1176 |
|
1177 if GetGearType(gear) == gtGrenade then |
|
1178 dx, dy = GetGearVelocity(gear) |
|
1179 if (dy == 0) then |
|
1180 |
|
1181 else |
|
1182 DeleteGear(gear) |
|
1183 end |
|
1184 end |
|
1185 |
|
1186 end |
|
1187 |
|
1188 function BlowShitUpPartTwo() |
|
1189 |
|
1190 destroyMap = false |
|
1191 runOnGears(CheckGrenades) |
|
1192 |
|
1193 end |
|
1194 |
|
1195 function BlowShitUp() |
|
1196 |
|
1197 destroyMap = true |
|
1198 |
|
1199 mapWidth = 4096 |
|
1200 mapHeight = 2048 |
|
1201 blockSize = 50 |
|
1202 |
|
1203 mY = 0 |
|
1204 |
|
1205 while (mY < WaterLine) do |
|
1206 |
|
1207 mX = 0 |
|
1208 mY = mY + 1*blockSize |
|
1209 while (mX < mapWidth) do |
|
1210 |
|
1211 mX = mX + (1*blockSize) |
|
1212 gear = AddGear(mX, mY, gtGrenade, 0, 0, 0, 5000) |
|
1213 SetState(gear, bor(GetState(gear),gstInvisible) ) |
|
1214 |
|
1215 end |
|
1216 |
|
1217 end |
|
1218 |
|
1219 end]] |
|
1220 |
|
1221 |
|
1222 -- you know, using this it might be possible to have a self destructing track, |
|
1223 -- or a moving one. |
|
1224 -- edit: this was from the gold old days before it was possible to erase sprites) |
|
1225 --[[function BoomGirder(x,y,rot) |
|
1226 girTime = 1 |
|
1227 if rot < 4 then |
|
1228 AddGear(x, y, gtGrenade, 0, 0, 0, girTime) |
|
1229 elseif rot == 4 then |
|
1230 g = AddGear(x-45, y, gtGrenade, 0, 0, 0, girTime) -- needed? |
|
1231 g = AddGear(x-30, y, gtGrenade, 0, 0, 0, girTime) |
|
1232 g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed? |
|
1233 g = AddGear(x+30, y, gtGrenade, 0, 0, 0, girTime) |
|
1234 g = AddGear(x+45, y, gtGrenade, 0, 0, 0, girTime) -- needed? |
|
1235 elseif rot == 5 then ------- diag |
|
1236 g = AddGear(x+45, y+45, gtGrenade, 0, 0, 0, girTime) --n |
|
1237 g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, girTime) |
|
1238 g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed? |
|
1239 g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, girTime) |
|
1240 g = AddGear(x-45, y-45, gtGrenade, 0, 0, 0, girTime) --n |
|
1241 elseif rot == 6 then |
|
1242 g = AddGear(x, y-45, gtGrenade, 0, 0, 0, girTime) -- needed? |
|
1243 g = AddGear(x, y+30, gtGrenade, 0, 0, 0, girTime) |
|
1244 g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed? |
|
1245 g = AddGear(x, y-30, gtGrenade, 0, 0, 0, girTime) |
|
1246 g = AddGear(x, y+45, gtGrenade, 0, 0, 0, girTime) -- needed? |
|
1247 elseif rot == 7 then ------- |
|
1248 g = AddGear(x+45, y-45, gtGrenade, 0, 0, 0, girTime) --n |
|
1249 g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, girTime) |
|
1250 g = AddGear(x, y, gtGrenade, 0, 0, 0, girTime) -- needed? |
|
1251 g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, girTime) |
|
1252 g = AddGear(x-45, y+45, gtGrenade, 0, 0, 0, girTime) --n |
|
1253 end |
|
1254 end]] |
|
1255 |
|
1256 --[[function SpecialGirderPlacement(x,y,rot) |
|
1257 |
|
1258 PlaceGirder(x, y, rot) |
|
1259 girTime = 10000 |
|
1260 |
|
1261 if rot < 4 then |
|
1262 AddGear(x, y, gtGrenade, 0, 0, 0, girTime) |
|
1263 elseif rot == 4 then |
|
1264 g = AddGear(x-30, y, gtGrenade, 0, 0, 0, girTime) |
|
1265 g = AddGear(x+30, y, gtGrenade, 0, 0, 0, girTime) |
|
1266 elseif rot == 5 then ------- |
|
1267 g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, girTime) |
|
1268 g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, girTime) |
|
1269 elseif rot == 6 then |
|
1270 g = AddGear(x, y+30, gtGrenade, 0, 0, 0, girTime) |
|
1271 g = AddGear(x, y-30, gtGrenade, 0, 0, 0, girTime) |
|
1272 elseif rot == 7 then ------- |
|
1273 g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, girTime) |
|
1274 g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, girTime) |
|
1275 end |
|
1276 |
|
1277 end]] |
|
1278 |
|
1279 --shoppabalance crap |
|
1280 function AddShoppaPoint(x,y,c) |
|
1281 table.insert(shoppaPX, x) |
|
1282 table.insert(shoppaPY, y) |
|
1283 table.insert(shoppaPR, c) |
|
1284 end |
|
1285 |
|
1286 function GetRankedColour(r) |
|
1287 if r == 1 then |
|
1288 return(0xFF0000FF) |
|
1289 elseif r == 2 then |
|
1290 return(0xFFFF00FF) |
|
1291 elseif r == 3 then |
|
1292 return(0x00FF00FF) |
|
1293 elseif r == 4 then |
|
1294 return(0x0000FFFF) |
|
1295 elseif r == 5 then |
|
1296 return(0xFF00FFFF) |
|
1297 end |
|
1298 end |
|
1299 |
|
1300 ----------------------------------------- |
|
1301 -- PRIMARY HEDGE EDITOR PLACEMENT STUFF |
|
1302 ----------------------------------------- |
|
1303 |
|
1304 function GetClosestGear() |
|
1305 closestDist = 999999999 |
|
1306 closestGear = nil |
|
1307 --sGear = nil |
|
1308 runOnGears(SelectGear) |
|
1309 return(closestGear) |
|
1310 end |
|
1311 |
|
1312 function SelectGear(gear) |
|
1313 |
|
1314 d = GetDistFromGearToXY(gear, placedX[placedCount], placedY[placedCount]) |
|
1315 |
|
1316 if d < closestDist then |
|
1317 closestDist = d |
|
1318 closestGear = gear |
|
1319 end |
|
1320 |
|
1321 end |
|
1322 |
|
1323 function PlaceWaypoint(x,y) |
|
1324 |
|
1325 placedX[placedCount] = x |
|
1326 placedY[placedCount] = y |
|
1327 placedType[placedCount] = loc("Waypoint Placement Mode") |
|
1328 placedLandFlags[placedCount] = nil -- use this to specify waypoint type maybe |
|
1329 placedHWMapFlag[placedCount] = 0 |
|
1330 |
|
1331 placedSprite[placedCount] = vgtCircle |
|
1332 placedSpec[placedCount] = AddVisualGear(x,y,vgtCircle,0,true) |
|
1333 placedTint[placedCount] = 0xFF0000FF |
|
1334 placedFrame[placedCount] = 1 --rad is 450 |
|
1335 SetVisualGearValues(placedSpec[placedCount], x, y, 20, 100, 1, 10, 0, 450, 5, placedTint[placedCount]) |
|
1336 placedCount = placedCount +1 |
|
1337 |
|
1338 end |
|
1339 |
|
1340 function LoadSprite(pX, pY, pSprite, pFrame, pTint, p1, p2, p3, pLandFlags) |
|
1341 |
|
1342 placedX[placedCount] = pX |
|
1343 placedY[placedCount] = pY |
|
1344 placedSpec[placedCount] = nil |
|
1345 |
|
1346 if pSprite == sprAmGirder then |
|
1347 |
|
1348 placedType[placedCount] = loc("Girder Placement Mode") |
|
1349 |
|
1350 --newHWMapStuff |
|
1351 if pLandFlags == lfIndestructible then specialMod = 1 |
|
1352 elseif pLandFlags == lfIce then specialMod = 2 |
|
1353 else specialMod = 0 |
|
1354 end |
|
1355 placedHWMapFlag[placedCount] = pFrame+100+(8*specialMod) |
|
1356 |
|
1357 |
|
1358 elseif pSprite == sprAmRubber then |
|
1359 |
|
1360 placedType[placedCount] = loc("Rubber Placement Mode") |
|
1361 |
|
1362 --newHWMapStuff |
|
1363 if pFrame == 0 then placedHWMapFlag[placedCount] = 124 |
|
1364 elseif pFrame == 1 then placedHWMapFlag[placedCount] = 125 |
|
1365 elseif pFrame == 2 then placedHWMapFlag[placedCount] = 126 |
|
1366 elseif pFrame == 3 then placedHWMapFlag[placedCount] = 127 |
|
1367 end |
|
1368 |
|
1369 else |
|
1370 placedType[placedCount] = loc("Sprite Placement Mode") |
|
1371 end |
|
1372 |
|
1373 --placedLandFlags[placedCount] = pLandFlags |
|
1374 if pLandFlags == lfIce then |
|
1375 placedLandFlags[placedCount] = "lfIce" |
|
1376 elseif pLandFlags == lfIndestructible then |
|
1377 placedLandFlags[placedCount] = "lfIndestructible" |
|
1378 elseif pLandFlags == lfBouncy then |
|
1379 placedLandFlags[placedCount] = "lfBouncy" |
|
1380 else |
|
1381 placedLandFlags[placedCount] = "lfNormal" |
|
1382 end |
|
1383 |
|
1384 --placedSuperSpec[placedCount] = nil |
|
1385 |
|
1386 placedTint[placedCount] = pTint |
|
1387 placedFrame[placedCount] = pFrame |
|
1388 |
|
1389 placedSprite[placedCount] = pSprite |
|
1390 |
|
1391 PlaceSprite(pX, pY, pSprite, pFrame, pTint, nil, nil, nil, pLandFlags) |
|
1392 |
|
1393 placedCount = placedCount + 1 |
|
1394 |
|
1395 end |
|
1396 |
|
1397 function CallPlaceSprite(pID) |
|
1398 |
|
1399 if landType == lfIce then |
|
1400 placedLandFlags[pID] = "lfIce" |
|
1401 placedTint[pID] = 250 + (250*0x100) + (250*0x10000) + (0*0x1000000) -- A BGR |
|
1402 elseif landType == lfIndestructible then |
|
1403 placedLandFlags[pID] = "lfIndestructible" |
|
1404 placedTint[pID] = 250 + (0*0x100) + (0*0x10000) + (150*0x1000000) -- A BGR |
|
1405 elseif landType == lfBouncy then |
|
1406 placedLandFlags[pID] = "lfBouncy" |
|
1407 placedTint[pID] = 250 + (0*0x100) + (250*0x10000) + (0*0x1000000) -- A BGR |
|
1408 else |
|
1409 placedLandFlags[pID] = "lfNormal" |
|
1410 --placedTint[pID] = nil |
|
1411 placedTint[pID] = 255 + (255*0x100) + (255*0x10000) + (255*0x1000000) -- A BGR |
|
1412 end |
|
1413 |
|
1414 PlaceSprite(placedX[pID], placedY[pID], placedSprite[pID], placedFrame[pID], |
|
1415 placedTint[pID], |
|
1416 nil, -- overrite existing land |
|
1417 nil, nil, -- this stuff specifies flipping |
|
1418 landType) |
|
1419 |
|
1420 end |
|
1421 |
|
1422 function SelectClosestSprite() |
|
1423 |
|
1424 closestDist = 999999999 |
|
1425 closestSpriteID = nil -- just in case |
|
1426 |
|
1427 for i = 0, (placedCount-1) do |
|
1428 if (placedType[i] == loc("Girder Placement Mode")) |
|
1429 or (placedType[i] == loc("Rubber Placement Mode")) |
|
1430 or (placedType[i] == loc("Sprite Placement Mode")) |
|
1431 then |
|
1432 q = placedX[i] - placedX[placedCount] |
|
1433 w = placedY[i] - placedY[placedCount] |
|
1434 d = ( (q*q) + (w*w) ) |
|
1435 if d < closestDist then |
|
1436 closestDist = d |
|
1437 closestSpriteID = i |
|
1438 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite) |
|
1439 |
|
1440 --newTint = placedTint[i] |
|
1441 newTint = 0xFF00FFFF |
|
1442 |
|
1443 SetVisualGearValues(sSprite, placedX[i], placedY[i], 0, 0, g5, placedFrame[i], 10000, placedSprite[i], 10000, newTint ) |
|
1444 |
|
1445 end |
|
1446 end |
|
1447 end |
|
1448 |
|
1449 end |
|
1450 |
|
1451 function EraseClosestSprite() |
|
1452 if closestSpriteID ~= nil then |
|
1453 EraseSprite(placedX[closestSpriteID], placedY[closestSpriteID], placedSprite[closestSpriteID], placedFrame[closestSpriteID], |
|
1454 nil, -- erase land only where the pixels match the land flag provided |
|
1455 nil, -- only erase the provided land flags. don't touch other land flags or LandPixels |
|
1456 nil, -- flip sprite horizontally |
|
1457 nil, -- flip sprite vertically |
|
1458 placedLandFlags[closestSpriteID]) |
|
1459 |
|
1460 placedX[closestSpriteID] = nil |
|
1461 placedY[closestSpriteID] = nil |
|
1462 placedSpec[closestSpriteID] = nil |
|
1463 --placedSuperSpec[closestSpriteID] = nil |
|
1464 placedType[closestSpriteID] = nil |
|
1465 placedTint[closestSpriteID] = nil |
|
1466 placedSprite[closestSpriteID] = nil |
|
1467 placedFrame[closestSpriteID] = nil |
|
1468 placedLandFlags[closestSpriteID] = nil |
|
1469 closestSpriteID = nil |
|
1470 SetVisualGearValues(sSprite, 0, 0, 0, 0, 0, 1, 10000, sprAmGirder, 10000, 0x00000000 ) |
|
1471 end |
|
1472 end |
|
1473 |
|
1474 -- work this into the above two functions and edit them, later |
|
1475 function EraseClosestWaypoint() |
|
1476 |
|
1477 closestDist = 999999999 |
|
1478 closestSpriteID = nil -- just in case |
|
1479 |
|
1480 for i = 0, (placedCount-1) do |
|
1481 if (placedType[i] == loc("Waypoint Placement Mode")) then |
|
1482 q = placedX[i] - placedX[placedCount] |
|
1483 w = placedY[i] - placedY[placedCount] |
|
1484 d = ( (q*q) + (w*w) ) |
|
1485 if d < closestDist then |
|
1486 closestDist = d |
|
1487 closestSpriteID = i |
|
1488 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite) |
|
1489 |
|
1490 --newTint = placedTint[i] |
|
1491 newTint = 0xFF00FFFF |
|
1492 |
|
1493 SetVisualGearValues(sSprite, placedX[i], placedY[i], 0, 0, g5, placedFrame[i], 10000, placedSprite[i], 10000, newTint ) |
|
1494 |
|
1495 end |
|
1496 end |
|
1497 end |
|
1498 |
|
1499 if closestSpriteID ~= nil then |
|
1500 DeleteVisualGear(placedSpec[closestSpriteID]) |
|
1501 placedX[closestSpriteID] = nil |
|
1502 placedY[closestSpriteID] = nil |
|
1503 placedSpec[closestSpriteID] = nil |
|
1504 --placedSuperSpec[closestSpriteID] = nil |
|
1505 placedType[closestSpriteID] = nil |
|
1506 placedTint[closestSpriteID] = nil |
|
1507 placedSprite[closestSpriteID] = nil |
|
1508 placedFrame[closestSpriteID] = nil |
|
1509 placedLandFlags[closestSpriteID] = nil |
|
1510 closestSpriteID = nil |
|
1511 SetVisualGearValues(sSprite, 0, 0, 0, 0, 0, 1, 10000, sprAmGirder, 10000, 0x00000000 ) |
|
1512 end |
|
1513 end |
|
1514 |
|
1515 |
|
1516 -- essentially called when user clicks the mouse |
|
1517 -- with girders or an airattack |
|
1518 function PlaceObject(x,y) |
|
1519 |
|
1520 placedX[placedCount] = x |
|
1521 placedY[placedCount] = y |
|
1522 placedType[placedCount] = cat[cIndex] |
|
1523 placedSpec[placedCount] = pMode[pIndex] |
|
1524 --placedSuperSpec[placedCount] = nil |
|
1525 placedTint[placedCount] = nil |
|
1526 placedFrame[placedCount] = nil |
|
1527 placedLandFlags[placedCount] = nil |
|
1528 placedSprite[placedCount] = nil |
|
1529 placedHWMapFlag[placedCount] = nil |
|
1530 |
|
1531 if cat[cIndex] == loc("Girder Placement Mode") then |
|
1532 |
|
1533 if superDelete == false then |
|
1534 --lfObject and lfBasic |
|
1535 placedFrame[placedCount] = CGR |
|
1536 placedSprite[placedCount] = sprAmGirder |
|
1537 CallPlaceSprite(placedCount) |
|
1538 |
|
1539 if landType == lfIndestructible then specialMod = 1 |
|
1540 elseif landType == lfIce then specialMod = 2 |
|
1541 else specialMod = 0 |
|
1542 end |
|
1543 placedHWMapFlag[placedCount] = CGR+100+(8*specialMod) |
|
1544 else |
|
1545 placedType[placedCount] = "bogus" -- we need this so we don't think we've placed a new girder and are trying to erase the things we just placed?? |
|
1546 SelectClosestSprite() |
|
1547 EraseClosestSprite() |
|
1548 end |
|
1549 |
|
1550 elseif cat[cIndex] == loc("Rubber Placement Mode") then |
|
1551 |
|
1552 if superDelete == false then |
|
1553 placedFrame[placedCount] = CGR |
|
1554 placedSprite[placedCount] = sprAmRubber |
|
1555 |
|
1556 --CallPlaceSprite(placedCount) |
|
1557 --new ermagerd |
|
1558 placedLandFlags[placedCount] = "lfBouncy" |
|
1559 placedTint[placedCount] = 255 + (255*0x100) + (255*0x10000) + (255*0x1000000) -- A BGR |
|
1560 PlaceSprite(placedX[placedCount], placedY[placedCount], placedSprite[placedCount], placedFrame[placedCount], |
|
1561 placedTint[placedCount], |
|
1562 nil, |
|
1563 nil, nil, |
|
1564 landType) |
|
1565 |
|
1566 if CGR == 0 then placedHWMapFlag[placedCount] = 124 |
|
1567 elseif CGR == 1 then placedHWMapFlag[placedCount] = 125 |
|
1568 elseif CGR == 2 then placedHWMapFlag[placedCount] = 126 |
|
1569 elseif CGR == 3 then placedHWMapFlag[placedCount] = 127 |
|
1570 end |
|
1571 else |
|
1572 placedType[placedCount] = "bogus" |
|
1573 SelectClosestSprite() |
|
1574 EraseClosestSprite() |
|
1575 end |
|
1576 |
|
1577 elseif cat[cIndex] == loc("Target Placement Mode") then |
|
1578 gear = AddGear(x, y, gtTarget, 0, 0, 0, 0) |
|
1579 elseif cat[cIndex] == loc("Cleaver Placement Mode") then |
|
1580 gear = AddGear(x, y, gtKnife, 0, 0, 0, 0) |
|
1581 elseif cat[cIndex] == loc("Health Crate Placement Mode") then |
|
1582 gear = SpawnHealthCrate(x,y) |
|
1583 SetHealth(gear, pMode[pIndex]) |
|
1584 setGearValue(gear,"caseType","med") |
|
1585 elseif cat[cIndex] == loc("Weapon Crate Placement Mode") then |
|
1586 gear = SpawnAmmoCrate(x, y, atkArray[pIndex][1]) |
|
1587 placedSpec[placedCount] = atkArray[pIndex][2] |
|
1588 setGearValue(gear,"caseType","ammo") |
|
1589 setGearValue(gear,"contents",atkArray[pIndex][2]) |
|
1590 elseif cat[cIndex] == loc("Utility Crate Placement Mode") then |
|
1591 gear = SpawnUtilityCrate(x, y, utilArray[pIndex][1]) |
|
1592 placedSpec[placedCount] = utilArray[pIndex][2] |
|
1593 setGearValue(gear,"caseType","util") |
|
1594 setGearValue(gear,"contents",utilArray[pIndex][2]) |
|
1595 elseif cat[cIndex] == loc("Barrel Placement Mode") then |
|
1596 gear = AddGear(x, y, gtExplosives, 0, 0, 0, 0) |
|
1597 SetHealth(gear, pMode[pIndex]) |
|
1598 elseif cat[cIndex] == loc("Mine Placement Mode") then |
|
1599 gear = AddGear(x, y, gtMine, 0, 0, 0, 0) |
|
1600 SetTimer(gear, pMode[pIndex]) |
|
1601 elseif cat[cIndex] == loc("Sticky Mine Placement Mode") then |
|
1602 gear = AddGear(x, y, gtSMine, 0, 0, 0, 0) |
|
1603 elseif cat[cIndex] == loc("Air Mine Placement Mode") then |
|
1604 gear = AddGear(x, y, gtAirMine, 0, 0, 0, 0) |
|
1605 SetTimer(gear, pMode[pIndex]) |
|
1606 elseif cat[cIndex] == loc("Advanced Repositioning Mode") then |
|
1607 |
|
1608 if pMode[pIndex] == loc("Selection Mode") then |
|
1609 sGear = GetClosestGear() |
|
1610 elseif pMode[pIndex] == loc("Placement Mode") then |
|
1611 if sGear ~= nil then |
|
1612 SetGearPosition(sGear, x, y) |
|
1613 end |
|
1614 elseif pMode[pIndex] == loc("Deletion Mode") then |
|
1615 sGear = GetClosestGear() |
|
1616 if (sGear ~= nil) and (GetGearType(sGear) ~= gtHedgehog) then |
|
1617 DeleteGear(sGear) |
|
1618 sGear = nil |
|
1619 end |
|
1620 end |
|
1621 |
|
1622 elseif (cat[cIndex] == loc("Hog Identity Mode")) or (cat[cIndex] == loc("Team Identity Mode")) then |
|
1623 |
|
1624 sGear = GetClosestGear() |
|
1625 if (sGear ~= nil) and (GetGearType(sGear) == gtHedgehog) then |
|
1626 if (cat[cIndex] == loc("Hog Identity Mode")) then |
|
1627 SetHogProfile(sGear, pMode[pIndex]) |
|
1628 else -- set for the whole team |
|
1629 SetTeamIdentity(sGear) |
|
1630 end |
|
1631 else |
|
1632 AddCaption(loc("Please click on a hedgehog."),0xffba00ff,capgrpVolume) |
|
1633 end |
|
1634 |
|
1635 |
|
1636 |
|
1637 elseif cat[cIndex] == loc("Health Modification Mode") then |
|
1638 |
|
1639 sGear = GetClosestGear() |
|
1640 if (sGear ~= nil) and (GetGearType(sGear) == gtHedgehog) then |
|
1641 SetHealth(sGear, pMode[pIndex]) |
|
1642 else |
|
1643 AddCaption(loc("Please click on a hedgehog."),0xffba00ff,capgrpVolume) |
|
1644 end |
|
1645 |
|
1646 elseif cat[cIndex] == loc("Sprite Modification Mode") then |
|
1647 |
|
1648 SelectClosestSprite() |
|
1649 |
|
1650 if closestSpriteID ~= nil then |
|
1651 -- we have a sprite selected somewhere |
|
1652 --if pMode[pIndex] == "Sprite Selection Mode" then |
|
1653 -- sprite is now selected, good job |
|
1654 --elseif pMode[pIndex] == "LandFlag Modification Mode" then |
|
1655 if pMode[pIndex] == loc("LandFlag Modification Mode") then |
|
1656 EraseSprite(placedX[closestSpriteID], placedY[closestSpriteID], placedSprite[closestSpriteID], placedFrame[closestSpriteID], nil, nil, nil, nil, placedLandFlags[closestSpriteID]) |
|
1657 CallPlaceSprite(closestSpriteID) |
|
1658 closestSpriteID = nil |
|
1659 SetVisualGearValues(sSprite, 0, 0, 0, 0, 0, 1, 10000, sprAmGirder, 10000, 0x00000000 ) |
|
1660 elseif pMode[pIndex] == loc("Sprite Erasure Mode") then |
|
1661 |
|
1662 EraseClosestSprite() |
|
1663 |
|
1664 end |
|
1665 end |
|
1666 |
|
1667 |
|
1668 elseif cat[cIndex] == loc("Tagging Mode") then |
|
1669 |
|
1670 sGear = GetClosestGear() |
|
1671 if sGear ~= nil then -- used to be closestGear |
|
1672 |
|
1673 if getGearValue(sGear,"tag") == nil then |
|
1674 |
|
1675 if pMode[pIndex] == loc("Tag Collection Mode") then |
|
1676 if GetGearType(sGear) == gtCase then |
|
1677 setGearValue(sGear, "tag","collection") |
|
1678 else |
|
1679 AddCaption(loc("Please click on a crate."),0xffba00ff,capgrpVolume) |
|
1680 end |
|
1681 else |
|
1682 if pMode[pIndex] == loc("Tag Victory Mode") then |
|
1683 setGearValue(sGear, "tag","victory") |
|
1684 elseif pMode[pIndex] == loc("Tag Failure Mode") then |
|
1685 setGearValue(sGear, "tag","failure") |
|
1686 end |
|
1687 end |
|
1688 |
|
1689 else |
|
1690 -- remove tag and delete circ |
|
1691 setGearValue(sGear, "tag", nil) |
|
1692 DeleteVisualGear(getGearValue(sGear,"tCirc")) |
|
1693 setGearValue(sGear, "tCirc", nil) |
|
1694 end |
|
1695 |
|
1696 |
|
1697 |
|
1698 end |
|
1699 |
|
1700 |
|
1701 --elseif cat[cIndex] == loc("Sprite Testing Mode") then |
|
1702 |
|
1703 -- frameID = 0 |
|
1704 -- visualSprite = reducedSpriteIDArray[pIndex] |
|
1705 -- tempE = AddVisualGear(x, y, vgtStraightShot, 0, true,1) |
|
1706 -- g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) |
|
1707 -- SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 ) |
|
1708 |
|
1709 |
|
1710 elseif cat[cIndex] == loc("Sprite Placement Mode") then |
|
1711 |
|
1712 if superDelete == false then |
|
1713 placedFrame[placedCount] = 1 |
|
1714 placedSprite[placedCount] = reducedSpriteIDArray[pIndex] |
|
1715 CallPlaceSprite(placedCount) |
|
1716 else |
|
1717 placedType[placedCount] = "bogus" |
|
1718 SelectClosestSprite() |
|
1719 EraseClosestSprite() |
|
1720 end |
|
1721 |
|
1722 elseif cat[cIndex] == loc("Waypoint Placement Mode") then |
|
1723 |
|
1724 |
|
1725 if pMode[pIndex] == loc("Waypoint Deletion Mode") then |
|
1726 EraseClosestWaypoint() |
|
1727 else |
|
1728 PlaceWaypoint(x,y) |
|
1729 placedCount = placedCount - 1 |
|
1730 end |
|
1731 |
|
1732 end |
|
1733 |
|
1734 placedCount = placedCount + 1 |
|
1735 |
|
1736 end |
|
1737 |
|
1738 -- called when user changes primary selection |
|
1739 -- either via up/down keys |
|
1740 -- or selecting girder/airattack |
|
1741 function RedefineSubset() |
|
1742 |
|
1743 superDelete = false -- fairly new addition |
|
1744 landType = 0 --- fairly new addition |
|
1745 pIndex = 1 |
|
1746 pMode = {} |
|
1747 |
|
1748 if cat[cIndex] == loc("Girder Placement Mode") then |
|
1749 pIndex = CGR |
|
1750 pMode = {loc("Girder")} |
|
1751 -- pCount = 1 |
|
1752 elseif cat[cIndex] == loc("Rubber Placement Mode") then |
|
1753 pIndex = CGR |
|
1754 pMode = {loc("Rubber")} |
|
1755 landType = lfBouncy -- for now, let's not allow anything else (-- fairly new addition) |
|
1756 -- pCount = 1??? |
|
1757 elseif cat[cIndex] == loc("Target Placement Mode") then |
|
1758 pMode = {loc("Standard Target")} |
|
1759 elseif cat[cIndex] == loc("Cleaver Placement Mode") then |
|
1760 pMode = {loc("Standard Cleaver")} |
|
1761 elseif cat[cIndex] == loc("Barrel Placement Mode") then |
|
1762 pMode = {1,50,75,100} |
|
1763 elseif cat[cIndex] == loc("Health Crate Placement Mode") then |
|
1764 pMode = {25,50,75,100} |
|
1765 elseif cat[cIndex] == loc("Weapon Crate Placement Mode") then |
|
1766 for i = 1, #atkArray do |
|
1767 pMode[i] = atkArray[i][4] --pMode[i] = atkArray[i][2] |
|
1768 end |
|
1769 elseif cat[cIndex] == loc("Utility Crate Placement Mode") then |
|
1770 for i = 1, #utilArray do |
|
1771 pMode[i] = utilArray[i][4] --pMode[i] = utilArray[i][2] |
|
1772 end |
|
1773 elseif cat[cIndex] == loc("Mine Placement Mode") then |
|
1774 pMode = {1,1000,2000,3000,4000,5000,0} |
|
1775 -- 0 is dud right, or is that nil? |
|
1776 elseif cat[cIndex] == loc("Sticky Mine Placement Mode") then |
|
1777 pMode = {loc("Normal Sticky Mine")} |
|
1778 elseif cat[cIndex] == loc("Air Mine Placement Mode") then |
|
1779 pMode = {1,1000,2000,3000,4000,5000,0} |
|
1780 elseif cat[cIndex] == loc("Advanced Repositioning Mode") then |
|
1781 pMode = {loc("Selection Mode"),loc("Placement Mode"), loc("Deletion Mode")} |
|
1782 elseif cat[cIndex] == loc("Tagging Mode") then |
|
1783 pMode = {loc("Tag Victory Mode"),loc("Tag Failure Mode"),loc("Tag Collection Mode")} |
|
1784 elseif cat[cIndex] == loc("Hog Identity Mode") then |
|
1785 pMode = {loc("Soldier"),loc("Grenadier"),loc("Sniper"),loc("Pyro"),loc("Ninja"),loc("Commander"),loc("Chef"),loc("Engineer"),loc("Physicist"),loc("Trapper"),loc("Saint"),loc("Clown")} |
|
1786 elseif cat[cIndex] == loc("Team Identity Mode") then |
|
1787 pMode = {"Clowns","Street Fighters","Cybernetic Empire","Color Squad","Fruit","The Police","The Ninja-Samurai Alliance","Pokemon","The Zoo","The Devs","Mushroom Kingdom","Pirates","Gangsters","Twenty-Twenty","Monsters","The Iron Curtain","The Hospital"} |
|
1788 elseif cat[cIndex] == loc("Health Modification Mode") then |
|
1789 pMode = {1, 25, 30, 50, 75, 100, 120, 150, 200, 1000} |
|
1790 elseif cat[cIndex] == loc("Sprite Modification Mode") then |
|
1791 --pMode = {"Sprite Selection Mode","LandFlag Modification Mode","Sprite Erasure Mode"} |
|
1792 pMode = {loc("LandFlag Modification Mode"),loc("Sprite Erasure Mode")} |
|
1793 elseif cat[cIndex] == loc("Sprite Testing Mode") or cat[cIndex] == loc("Sprite Placement Mode") then |
|
1794 --for i = 1, #spriteTextArray do |
|
1795 -- pMode[i] = spriteTextArray[i] |
|
1796 --end |
|
1797 for i = 1, #reducedSpriteTextArray do |
|
1798 pMode[i] = reducedSpriteTextArray[i] |
|
1799 end |
|
1800 elseif cat[cIndex] == loc("Waypoint Placement Mode") then |
|
1801 pMode = {loc("Standard Waypoint"), loc("Waypoint Deletion Mode")} |
|
1802 end |
|
1803 |
|
1804 end |
|
1805 |
|
1806 ------------------------------------------------ |
|
1807 -- LOADING AND SAVING DATA STUFF |
|
1808 ------------------------------------------------ |
|
1809 |
|
1810 -- paste data you have saved previously here |
|
1811 function LoadLevelData() |
|
1812 |
|
1813 if (mapID == nil) or (mapID == 0) then |
|
1814 LoadMap(1) |
|
1815 else |
|
1816 LoadMap(mapID) |
|
1817 end |
|
1818 |
|
1819 for i = 1, techCount-1 do |
|
1820 PlaceWaypoint(techX[i],techY[i]) |
|
1821 end |
|
1822 |
|
1823 end |
|
1824 |
|
1825 -- When you save your level, this function |
|
1826 -- generates the AddTeam and AddHog function calls for onGameInit() |
|
1827 function GetDataForSavingHogs(gear) |
|
1828 |
|
1829 --AddTeam(teamname, color, grave, fort, voicepack, flag) |
|
1830 --AddHog(hogname, botlevel, health, hat) |
|
1831 |
|
1832 --this is a quick hack so that the human team(s) will always be |
|
1833 --given the first move ahead of the AI |
|
1834 tempDataList = {} |
|
1835 if GetHogLevel(gear) == 0 then |
|
1836 tempDataList = hogDataList |
|
1837 else |
|
1838 tempDataList = AIHogDataList |
|
1839 end |
|
1840 |
|
1841 if GetHogTeamName(gear) ~= lastRecordedTeam then |
|
1842 |
|
1843 teamCounter = teamCounter + 1 |
|
1844 if teamCounter == 9 then |
|
1845 teamCounter = 1 |
|
1846 end |
|
1847 |
|
1848 -- try match team colour to the colours recorded in the colour array |
|
1849 |
|
1850 tColor = 0x00000000 |
|
1851 for i = 1, #colorArray do |
|
1852 if GetClanColor(GetHogClan(gear)) == colorArray[i][1] then |
|
1853 tColor = colorArray[i][2] |
|
1854 end |
|
1855 end |
|
1856 |
|
1857 -- no match, just give him a default colour from the array, then |
|
1858 if tColor == 0x00000000 then |
|
1859 tColor = colorArray[teamCounter][2] |
|
1860 end |
|
1861 |
|
1862 |
|
1863 -- there is used to be no way to read this data, so |
|
1864 -- I was assigning teams a random grave, fort, flag and voice |
|
1865 -- but now we should be able to get the real thing |
|
1866 -- so let's do it if they haven't used one of the preset teams |
|
1867 if getGearValue(gear,"grave") == nil then |
|
1868 tFort = fortArray[1+GetRandom(#fortArray)] |
|
1869 tGrave = GetHogGrave(gear) |
|
1870 tFlag = GetHogFlag(gear) |
|
1871 tVoice = GetHogVoicepack(gear) |
|
1872 --tGrave = graveArray[1+GetRandom(#graveArray)] |
|
1873 --tFlag = flagArray[1+GetRandom(#flagArray)] |
|
1874 --tVoice = voiceArray[1+GetRandom(#voiceArray)] |
|
1875 else |
|
1876 tGrave = getGearValue(gear,"grave") |
|
1877 tFort = getGearValue(gear,"fort") |
|
1878 tFlag = getGearValue(gear,"flag") |
|
1879 tVoice = getGearValue(gear,"voice") |
|
1880 end |
|
1881 |
|
1882 lastRecordedTeam = GetHogTeamName(gear) |
|
1883 |
|
1884 table.insert(tempDataList, "") |
|
1885 table.insert (tempDataList, |
|
1886 " AddTeam(\"" .. |
|
1887 GetHogTeamName(gear) .."\"" .. |
|
1888 ", " .. "\"" ..tColor .. "\"" .. |
|
1889 -- --", " .. colorArray[teamCounter][2] .. |
|
1890 ", " .. "\"" .. tGrave .. "\"" .. |
|
1891 ", " .. "\"" .. tFort .. "\"" .. |
|
1892 ", " .. "\"" .. tVoice .. "\"" .. |
|
1893 ", " .. "\"" .. tFlag .. "\"" .. |
|
1894 ")" |
|
1895 ) |
|
1896 |
|
1897 end |
|
1898 |
|
1899 table.insert(hhs, gear) |
|
1900 |
|
1901 table.insert (tempDataList, " hhs[" .. #hhs .."] = AddHog(\"" .. |
|
1902 GetHogName(gear) .. "\", " .. |
|
1903 GetHogLevel(gear) .. ", " .. |
|
1904 GetHealth(gear) .. ", \"" .. |
|
1905 GetHogHat(gear) .. "\"" .. |
|
1906 ")" |
|
1907 ) |
|
1908 |
|
1909 table.insert (tempDataList," SetGearPosition(hhs[" .. #hhs .. "], " .. GetX(gear) .. ", " .. GetY(gear) .. ")") |
|
1910 |
|
1911 if getGearValue(gear,"tag") ~= nil then |
|
1912 table.insert (tempDataList," setGearValue(hhs[" .. #hhs .. "], \"tag\", \"" .. getGearValue(gear,"tag") .. "\")") |
|
1913 end |
|
1914 |
|
1915 -- save the ammo values for each gear, we will call this later |
|
1916 -- when we want to output it to console |
|
1917 |
|
1918 if getGearValue(gear,"ranking") ~= nil then |
|
1919 table.insert(shoppaPointList, "AddShoppaPoint(" .. GetX(gear) .. ", " .. GetY(gear) .. ", " .. getGearValue(gear,"ranking") .. ")") |
|
1920 end |
|
1921 |
|
1922 for i = 1, #atkArray do |
|
1923 setGearValue(gear, atkArray[i][1], GetAmmoCount(gear, atkArray[i][1])) |
|
1924 end |
|
1925 |
|
1926 for i = 1, #utilArray do |
|
1927 setGearValue(gear, utilArray[i][1], GetAmmoCount(gear, utilArray[i][1])) |
|
1928 end |
|
1929 |
|
1930 if GetHogLevel(gear) == 0 then |
|
1931 hogDataList = tempDataList |
|
1932 else |
|
1933 AIHogDataList = tempDataList |
|
1934 end |
|
1935 |
|
1936 end |
|
1937 |
|
1938 -- output hog and team data to the console |
|
1939 function SaveHogData() |
|
1940 |
|
1941 runOnHogs(GetDataForSavingHogs) |
|
1942 |
|
1943 WriteLnToConsole(" ------ TEAM LIST ------") |
|
1944 |
|
1945 for i = 1, #hogDataList do |
|
1946 WriteLnToConsole(hogDataList[i]) |
|
1947 end |
|
1948 |
|
1949 for i = 1, #AIHogDataList do |
|
1950 WriteLnToConsole(AIHogDataList[i]) |
|
1951 end |
|
1952 |
|
1953 WriteLnToConsole("") |
|
1954 |
|
1955 if #shoppaPointList > 0 then |
|
1956 WriteLnToConsole(" ------ SHOPPA POINT LIST ------") |
|
1957 for i = 1, #shoppaPointList do |
|
1958 WriteLnToConsole(shoppaPointList[i]) |
|
1959 end |
|
1960 end |
|
1961 |
|
1962 |
|
1963 end |
|
1964 |
|
1965 -- generates an onGameInit() template with scheme data, team adds, and hogs |
|
1966 function SaveConfigData() |
|
1967 |
|
1968 WriteLnToConsole("function onGameInit()") |
|
1969 WriteLnToConsole("") |
|
1970 |
|
1971 temp = " EnableGameFlags(gfDisableWind" |
|
1972 for i = 1, #gameFlagList do |
|
1973 if gameFlagList[i][2] == true then |
|
1974 temp = temp .. ", ".. gameFlagList[i][1] |
|
1975 end |
|
1976 end |
|
1977 |
|
1978 WriteLnToConsole(" ClearGameFlags()") |
|
1979 WriteLnToConsole(temp .. ")") |
|
1980 |
|
1981 WriteLnToConsole(" Map = \"" .. Map .. "\"") |
|
1982 WriteLnToConsole(" Theme = \"" .. "Nature" .. "\"") |
|
1983 WriteLnToConsole(" TurnTime = " .. TurnTime) |
|
1984 WriteLnToConsole(" Explosives = " .. Explosives) |
|
1985 WriteLnToConsole(" MinesNum = " .. MinesNum) |
|
1986 WriteLnToConsole(" CaseFreq = " .. CaseFreq) |
|
1987 WriteLnToConsole(" Delay = " .. Delay) |
|
1988 |
|
1989 WriteLnToConsole(" HealthCaseProb = " .. HealthCaseProb) |
|
1990 WriteLnToConsole(" HealthCaseAmount = " .. HealthCaseAmount) |
|
1991 WriteLnToConsole(" DamagePercent = " .. DamagePercent) |
|
1992 WriteLnToConsole(" MinesTime = " .. MinesTime) |
|
1993 WriteLnToConsole(" MineDudPercent = " .. MineDudPercent) |
|
1994 WriteLnToConsole(" SuddenDeathTurns = " .. SuddenDeathTurns) |
|
1995 WriteLnToConsole(" WaterRise = " .. WaterRise) |
|
1996 WriteLnToConsole(" HealthDecrease = " .. HealthDecrease) |
|
1997 |
|
1998 --WriteLnToConsole(" Ready = " .. Ready) |
|
1999 --WriteLnToConsole(" AirMinesNum = " .. AirMinesNum) |
|
2000 --WriteLnToConsole(" ScriptParam = " .. ScriptParam) |
|
2001 --WriteLnToConsole(" GetAwayTime = " .. GetAwayTime) |
|
2002 |
|
2003 WriteLnToConsole("") |
|
2004 |
|
2005 SaveHogData() |
|
2006 |
|
2007 WriteLnToConsole("") |
|
2008 WriteLnToConsole("end") |
|
2009 |
|
2010 end |
|
2011 |
|
2012 -- output gear data as special points to be placed in a converted HWMAP, readable by InterpretPoints() |
|
2013 function ConvertGearDataToHWPText() |
|
2014 |
|
2015 WriteLnToConsole("") |
|
2016 WriteLnToConsole("--BEGIN HWMAP CONVERTER POINTS--") |
|
2017 WriteLnToConsole("-- You can paste this data into the HWMAP converter if needed.") |
|
2018 WriteLnToConsole("--[[") |
|
2019 WriteLnToConsole("") |
|
2020 |
|
2021 for i = 1, #hFlagList do |
|
2022 WriteLnToConsole(hFlagList[i]) |
|
2023 end |
|
2024 |
|
2025 WriteLnToConsole("") |
|
2026 WriteLnToConsole("]]") |
|
2027 WriteLnToConsole("--END HWMAP CONVERTER POINTS--") |
|
2028 WriteLnToConsole("") |
|
2029 |
|
2030 end |
|
2031 |
|
2032 -- sigh |
|
2033 -- gradually got more bloated with the addition of hwpoint tracking and |
|
2034 -- distinction betweeen the need to track victory/win conditions or not |
|
2035 function GetDataForGearSaving(gear) |
|
2036 |
|
2037 temp = nil |
|
2038 specialFlag = nil |
|
2039 arrayList = nil |
|
2040 |
|
2041 if GetGearType(gear) == gtMine then |
|
2042 |
|
2043 if (getGearValue(gear, "tag") ~= nil) then |
|
2044 temp = " tempG = AddGear(" .. |
|
2045 GetX(gear) .. ", " .. |
|
2046 GetY(gear) .. ", gtMine, 0, 0, 0, 0)" |
|
2047 table.insert(mineList, temp) |
|
2048 table.insert(mineList, " SetTimer(tempG, " .. GetTimer(gear) .. ")") |
|
2049 table.insert(mineList, " setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")") |
|
2050 else |
|
2051 |
|
2052 temp = " SetTimer(" .. "AddGear(" .. |
|
2053 GetX(gear) .. ", " .. |
|
2054 GetY(gear) .. ", gtMine, 0, 0, 0, 0)" .. ", " .. |
|
2055 GetTimer(gear) ..")" |
|
2056 table.insert(mineList, temp) |
|
2057 |
|
2058 end |
|
2059 |
|
2060 if GetTimer(gear) == 1 then specialFlag = 1 |
|
2061 elseif GetTimer(gear) == 1000 then specialFlag = 2 |
|
2062 elseif GetTimer(gear) == 2000 then specialFlag = 3 |
|
2063 elseif GetTimer(gear) == 3000 then specialFlag = 4 |
|
2064 elseif GetTimer(gear) == 4000 then specialFlag = 5 |
|
2065 elseif GetTimer(gear) == 5000 then specialFlag = 6 |
|
2066 end |
|
2067 |
|
2068 elseif GetGearType(gear) == gtSMine then |
|
2069 |
|
2070 arrayList = sMineList |
|
2071 temp = " tempG = AddGear(" .. |
|
2072 GetX(gear) .. ", " .. |
|
2073 GetY(gear) .. ", gtSMine, 0, 0, 0, 0)" |
|
2074 table.insert(sMineList, temp) |
|
2075 specialFlag = 7 |
|
2076 |
|
2077 elseif GetGearType(gear) == gtAirMine then |
|
2078 |
|
2079 if (getGearValue(gear, "tag") ~= nil) then |
|
2080 temp = " tempG = AddGear(" .. |
|
2081 GetX(gear) .. ", " .. |
|
2082 GetY(gear) .. ", gtAirMine, 0, 0, 0, 0)" |
|
2083 table.insert(airMineList, temp) |
|
2084 table.insert(airMineList, " SetTimer(tempG, " .. GetTimer(gear) .. ")") |
|
2085 table.insert(airMineList, " setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")") |
|
2086 else |
|
2087 |
|
2088 temp = " SetTimer(" .. "AddGear(" .. |
|
2089 GetX(gear) .. ", " .. |
|
2090 GetY(gear) .. ", gtAirMine, 0, 0, 0, 0)" .. ", " .. |
|
2091 GetTimer(gear) ..")" |
|
2092 table.insert(airMineList, temp) |
|
2093 |
|
2094 end |
|
2095 |
|
2096 table.insert(previewDataList, " PreviewPlacedGear(" .. GetX(gear) ..", " .. GetY(gear) .. ")") |
|
2097 specialFlag = 8 |
|
2098 |
|
2099 elseif GetGearType(gear) == gtExplosives then |
|
2100 |
|
2101 if (getGearValue(gear, "tag") ~= nil) then |
|
2102 temp = " tempG = AddGear(" .. |
|
2103 GetX(gear) .. ", " .. |
|
2104 GetY(gear) .. ", gtExplosives, 0, 0, 0, 0)" |
|
2105 table.insert(explosivesList, temp) |
|
2106 table.insert(explosivesList, " SetHealth(tempG, " .. GetHealth(gear) .. ")") |
|
2107 table.insert(explosivesList, " setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")") |
|
2108 else |
|
2109 |
|
2110 temp = " SetHealth(" .. "AddGear(" .. |
|
2111 GetX(gear) .. ", " .. |
|
2112 GetY(gear) .. ", gtExplosives, 0, 0, 0, 0)" .. ", " .. |
|
2113 GetHealth(gear) ..")" |
|
2114 table.insert(explosivesList, temp) |
|
2115 |
|
2116 end |
|
2117 |
|
2118 table.insert(previewDataList, " PreviewPlacedGear(" .. GetX(gear) ..", " .. GetY(gear) .. ")") |
|
2119 |
|
2120 if GetHealth(gear) == 1 then specialFlag = 15 |
|
2121 elseif GetHealth(gear) == 25 then specialFlag = 16 |
|
2122 elseif GetHealth(gear) == 50 then specialFlag = 17 |
|
2123 elseif GetHealth(gear) == 75 then specialFlag = 18 |
|
2124 elseif GetHealth(gear) == 100 then specialFlag = 19 |
|
2125 end |
|
2126 |
|
2127 elseif GetGearType(gear) == gtTarget then |
|
2128 |
|
2129 arrayList = targetList |
|
2130 temp = " tempG = AddGear(" .. |
|
2131 GetX(gear) .. ", " .. |
|
2132 GetY(gear) .. ", gtTarget, 0, 0, 0, 0)" |
|
2133 table.insert(targetList, temp) |
|
2134 specialFlag = 14 |
|
2135 |
|
2136 elseif GetGearType(gear) == gtKnife then |
|
2137 |
|
2138 arrayList = knifeList |
|
2139 temp = " tempG = AddGear(" .. |
|
2140 GetX(gear) .. ", " .. |
|
2141 GetY(gear) .. ", gtKnife, 0, 0, 0, 0)" |
|
2142 table.insert(knifeList, temp) |
|
2143 specialFlag = 13 |
|
2144 |
|
2145 elseif GetGearType(gear) == gtCase then |
|
2146 |
|
2147 table.insert(previewDataList, " PreviewPlacedGear(" .. GetX(gear) ..", " .. GetY(gear) .. ")") |
|
2148 |
|
2149 if (GetHealth(gear) ~= nil) and (GetHealth(gear) ~= 0) then |
|
2150 |
|
2151 if (getGearValue(gear, "tag") ~= nil) then |
|
2152 temp = " tempG = SpawnHealthCrate(" .. |
|
2153 GetX(gear) ..", " .. |
|
2154 GetY(gear) .. |
|
2155 ")" |
|
2156 table.insert(healthCrateList, temp) |
|
2157 table.insert(healthCrateList, " SetHealth(tempG, " .. GetHealth(gear) .. ")") |
|
2158 table.insert(healthCrateList, " setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")") |
|
2159 else |
|
2160 temp = " SetHealth(SpawnHealthCrate(" .. |
|
2161 GetX(gear) ..", " .. |
|
2162 GetY(gear) .. |
|
2163 "), " .. |
|
2164 GetHealth(gear) ..")" |
|
2165 table.insert(healthCrateList, temp) |
|
2166 end |
|
2167 |
|
2168 if GetHealth(gear) == 25 then specialFlag = 9 |
|
2169 elseif GetHealth(gear) == 50 then specialFlag = 10 |
|
2170 elseif GetHealth(gear) == 75 then specialFlag = 11 |
|
2171 elseif GetHealth(gear) == 100 then specialFlag = 12 |
|
2172 end |
|
2173 |
|
2174 elseif getGearValue(gear,"caseType") == "ammo" then |
|
2175 |
|
2176 arrayList = wepCrateList |
|
2177 temp = " tempG = SpawnAmmoCrate(" .. |
|
2178 GetX(gear) ..", " .. |
|
2179 GetY(gear) ..", " .. |
|
2180 getGearValue(gear,"contents") .. |
|
2181 ")" |
|
2182 table.insert(wepCrateList, temp) |
|
2183 |
|
2184 tempV = getGearValue(gear,"contents") |
|
2185 for i = 1, #atkArray do |
|
2186 if tempV == atkArray[i][2] then |
|
2187 specialFlag = i + 19 |
|
2188 end |
|
2189 end |
|
2190 |
|
2191 --dammit, we probably need two more entries if we want to allow editing of existing maps |
|
2192 table.insert(wepCrateList, " setGearValue(tempG, \"caseType\", \"" .. getGearValue(gear,"caseType") .. "\")") |
|
2193 table.insert(wepCrateList, " setGearValue(tempG, \"contents\", \"" .. getGearValue(gear,"contents") .. "\")") |
|
2194 |
|
2195 |
|
2196 elseif getGearValue(gear,"caseType") == "util" then |
|
2197 |
|
2198 arrayList = utilCrateList |
|
2199 temp = " tempG = SpawnUtilityCrate(" .. |
|
2200 GetX(gear) ..", " .. |
|
2201 GetY(gear) ..", " .. |
|
2202 getGearValue(gear,"contents") .. |
|
2203 ")" |
|
2204 table.insert(utilCrateList, temp) |
|
2205 |
|
2206 tempV = getGearValue(gear,"contents") |
|
2207 for i = 1, #utilArray do |
|
2208 if tempV == utilArray[i][2] then |
|
2209 specialFlag = i + 19 + #atkArray |
|
2210 end |
|
2211 end |
|
2212 |
|
2213 --dammit, we probably need two more entries if we want to allow editing of existing maps |
|
2214 table.insert(utilCrateList, " setGearValue(tempG, \"caseType\", \"" .. getGearValue(gear,"caseType") .. "\")") |
|
2215 table.insert(utilCrateList, " setGearValue(tempG, \"contents\", \"" .. getGearValue(gear,"contents") .. "\")") |
|
2216 |
|
2217 end |
|
2218 |
|
2219 end |
|
2220 |
|
2221 -- add tracking of simple win/lose for simpler gears that have a tempG = listed above |
|
2222 if (getGearValue(gear, "tag") ~= nil) and (arrayList ~= nil) then |
|
2223 table.insert(arrayList, " setGearValue(tempG, \"tag\", \"" .. getGearValue(gear,"tag") .. "\")") |
|
2224 end |
|
2225 |
|
2226 -- this creates a big, messy list of special flags for use in hwmaps |
|
2227 if specialFlag ~= nil then |
|
2228 table.insert(hFlagList, " " .. GetX(gear) .. " " .. GetY(gear) .. " " .. specialFlag) |
|
2229 end |
|
2230 |
|
2231 end |
|
2232 |
|
2233 -- generate a title and list all the gears if there is at least 1 of them in the list |
|
2234 function AppendGearList(gearList, consoleLine) |
|
2235 if #gearList > 0 then |
|
2236 WriteLnToConsole(consoleLine) |
|
2237 for i = 1, #gearList do |
|
2238 WriteLnToConsole(gearList[i]) |
|
2239 end |
|
2240 WriteLnToConsole("") |
|
2241 end |
|
2242 end |
|
2243 |
|
2244 -- new attempt at doing shit a bit cleaner: |
|
2245 -- it may be a bit verbose, but this should generate a comprehensive, human-readable |
|
2246 -- list of gears, broken up into sections and output it to the console |
|
2247 function SaveGearData() |
|
2248 |
|
2249 runOnGears(GetDataForGearSaving) |
|
2250 |
|
2251 AppendGearList(healthCrateList, " ------ HEALTH CRATE LIST ------") |
|
2252 AppendGearList(wepCrateList, " ------ AMMO CRATE LIST ------") |
|
2253 AppendGearList(utilCrateList, " ------ UTILITY CRATE LIST ------") |
|
2254 AppendGearList(explosivesList, " ------ BARREL LIST ------") |
|
2255 AppendGearList(mineList, " ------ MINE LIST ------") |
|
2256 AppendGearList(sMineList, " ------ STICKY MINE LIST ------") |
|
2257 AppendGearList(airMineList, " ------ AIR MINE LIST ------") |
|
2258 AppendGearList(targetList, " ------ TARGET LIST ------") |
|
2259 AppendGearList(knifeList, " ------ CLEAVER LIST ------") |
|
2260 |
|
2261 end |
|
2262 |
|
2263 function DoAmmoLoop(i) |
|
2264 |
|
2265 for x = 1, #atkArray do |
|
2266 if getGearValue(hhs[i],atkArray[x][1]) ~= 0 then |
|
2267 WriteLnToConsole(" AddAmmo(hhs[" .. i .. "], " .. atkArray[x][2] .. ", " .. getGearValue(hhs[i],atkArray[x][1]) .. ")") |
|
2268 end |
|
2269 end |
|
2270 |
|
2271 for x = 1, #utilArray do |
|
2272 if getGearValue(hhs[i],utilArray[x][1]) ~= 0 then |
|
2273 WriteLnToConsole(" AddAmmo(hhs[" .. i .. "], " .. utilArray[x][2] .. ", " .. getGearValue(hhs[i],utilArray[x][1]) .. ")") |
|
2274 end |
|
2275 end |
|
2276 |
|
2277 WriteLnToConsole("") |
|
2278 |
|
2279 end |
|
2280 |
|
2281 -- this is called when a tagged gear is deleted during a mission |
|
2282 -- it determines if the game is ready to conclude in victory/defeat |
|
2283 function CheckForConclusion(gear) |
|
2284 |
|
2285 -- failure gears must always all be protected, so if any of them are destroyed the player loses |
|
2286 if getGearValue(gear,"tag") == "failure" then |
|
2287 EndGameIn("failure") |
|
2288 else |
|
2289 |
|
2290 -- the presence of other tagged gears means that the goal of this mission is not |
|
2291 -- simply to kill every hedgehog. Thus, we need to count the remaining tagged objects |
|
2292 -- to see how close we are to completing the mission successfully. |
|
2293 victoryObj = 0 |
|
2294 failObj = 0 |
|
2295 collectObj = 0 |
|
2296 runOnGears(CheckForConditions) |
|
2297 |
|
2298 if GetGearType(gear) ~= gtCase then |
|
2299 |
|
2300 -- non-crates can only be tagged as victory or failure, and as this wasn't tagged |
|
2301 -- "failure" in our earlier check, this must be a victory tagged gear. Let's adust |
|
2302 -- the number of objects accordingly as it's in the process of being destroyed. |
|
2303 victoryObj = victoryObj - 1 |
|
2304 |
|
2305 -- if there are no objectives left to complete, end the game in victory |
|
2306 if (victoryObj == 0) and (collectObj == 0) then |
|
2307 EndGameIn("victory") |
|
2308 end |
|
2309 |
|
2310 else |
|
2311 -- this crate was deleted, but was it collected or destroyed, and how does that match |
|
2312 -- the goals of our mission? |
|
2313 if (GetGearMessage(gear) == 256) and (getGearValue(gear,"tag") == "collection") then |
|
2314 if GetHogLevel(CurrentHedgehog) == 0 then |
|
2315 -- the enemy stole our crate |
|
2316 EndGameIn("failure") |
|
2317 else |
|
2318 collectObj = collectObj - 1 |
|
2319 if (victoryObj == 0) and (collectObj == 0) then |
|
2320 EndGameIn("victory") |
|
2321 end |
|
2322 end |
|
2323 elseif (GetGearMessage(gear) == 0) and (getGearValue(gear,"tag") == "victory") then |
|
2324 victoryObj = victoryObj - 1 |
|
2325 if (victoryObj == 0) and (collectObj == 0) then |
|
2326 EndGameIn("victory") |
|
2327 end |
|
2328 else |
|
2329 -- unfortunately, we messed up our mission. |
|
2330 EndGameIn("failure") |
|
2331 end |
|
2332 |
|
2333 end |
|
2334 |
|
2335 end |
|
2336 |
|
2337 end |
|
2338 |
|
2339 --------------------------------- |
|
2340 -- THE BIG ONE |
|
2341 --------------------------------- |
|
2342 -- saving process starts here |
|
2343 -- saves all level data to logs/game0.log and generates a simple script template |
|
2344 function SaveLevelData() |
|
2345 |
|
2346 WriteLnToConsole("------ BEGIN SCRIPT ------") |
|
2347 WriteLnToConsole("-- Copy and Paste this text into an empty text file, and save it as") |
|
2348 WriteLnToConsole("-- YOURTITLEHERE.lua, in your Data/Missions/Training/ folder.") |
|
2349 |
|
2350 WriteLnToConsole("") |
|
2351 |
|
2352 WriteLnToConsole("HedgewarsScriptLoad(\"/Scripts/Locale.lua\")") |
|
2353 WriteLnToConsole("HedgewarsScriptLoad(\"/Scripts/Tracker.lua\")") |
|
2354 |
|
2355 WriteLnToConsole("") |
|
2356 WriteLnToConsole("local hhs = {}") |
|
2357 --WriteLnToConsole("local ufoGear = nil") |
|
2358 WriteLnToConsole("") |
|
2359 |
|
2360 WriteLnToConsole("local wepArray = {") |
|
2361 WriteLnToConsole(" amBazooka, amBee, amMortar, amDrill, amSnowball,") |
|
2362 WriteLnToConsole(" amGrenade, amClusterBomb, amMolotov, amWatermelon, amHellishBomb, amGasBomb,") |
|
2363 WriteLnToConsole(" amShotgun, amDEagle, amSniperRifle, amSineGun, amLandGun, amIceGun,") |
|
2364 WriteLnToConsole(" amFirePunch, amWhip, amBaseballBat, amKamikaze, amSeduction, amHammer,") |
|
2365 WriteLnToConsole(" amMine, amDynamite, amCake, amBallgun, amRCPlane, amSMine, amAirMine,") |
|
2366 WriteLnToConsole(" amAirAttack, amMineStrike, amDrillStrike, amNapalm, amPiano, amBirdy,") |
|
2367 WriteLnToConsole(" amBlowTorch, amPickHammer, amGirder, amRubber, amPortalGun,") |
|
2368 WriteLnToConsole(" amRope, amParachute, amTeleport, amJetpack,") |
|
2369 WriteLnToConsole(" amInvulnerable, amLaserSight, amVampiric,") |
|
2370 WriteLnToConsole(" amLowGravity, amExtraDamage, amExtraTime, amResurrector, amTardis, amSwitch") |
|
2371 WriteLnToConsole(" }") |
|
2372 WriteLnToConsole("") |
|
2373 |
|
2374 |
|
2375 SaveConfigData() |
|
2376 |
|
2377 |
|
2378 WriteLnToConsole("") |
|
2379 WriteLnToConsole("function LoadHogWeapons()") |
|
2380 WriteLnToConsole("") |
|
2381 |
|
2382 if band(GameFlags, gfPerHogAmmo) ~= 0 then -- per hog ammo |
|
2383 for i = 1, #hhs do |
|
2384 DoAmmoLoop(i) |
|
2385 end |
|
2386 |
|
2387 else -- team-based ammo |
|
2388 |
|
2389 teamCounter = 0 |
|
2390 lastRecordedTeam = "" |
|
2391 for i = 1, #hhs do |
|
2392 |
|
2393 if GetHogTeamName(hhs[i]) ~= lastRecordedTeam then |
|
2394 lastRecordedTeam = GetHogTeamName(hhs[i]) |
|
2395 teamCounter = teamCounter + 1 |
|
2396 if teamCounter == 9 then |
|
2397 teamCounter = 1 |
|
2398 end |
|
2399 DoAmmoLoop(i) |
|
2400 end |
|
2401 |
|
2402 end |
|
2403 |
|
2404 end |
|
2405 |
|
2406 |
|
2407 WriteLnToConsole("end") |
|
2408 WriteLnToConsole("") |
|
2409 |
|
2410 WriteLnToConsole("") |
|
2411 WriteLnToConsole("function LoadSprite(pX, pY, pSprite, pFrame, pTint, p1, p2, p3, pLandFlags)") |
|
2412 WriteLnToConsole(" PlaceSprite(pX, pY, pSprite, pFrame, pTint, p1, p2, p3, pLandFlags)") |
|
2413 WriteLnToConsole("end") |
|
2414 WriteLnToConsole("") |
|
2415 |
|
2416 WriteLnToConsole("") |
|
2417 WriteLnToConsole("function LoadGearData()") |
|
2418 WriteLnToConsole("") |
|
2419 |
|
2420 WriteLnToConsole(" --BEGIN CORE DATA--") |
|
2421 WriteLnToConsole("") |
|
2422 |
|
2423 WriteLnToConsole(" ------ PORTAL DISTANCE and UFO FUEL ------") |
|
2424 WriteLnToConsole(" ufoFuel = " .. ufoFuel) |
|
2425 WriteLnToConsole(" portalDistance = " .. portalDistance*5) |
|
2426 table.insert(hFlagList, " " .. portalDistance*5 .. " " .. ufoFuel .. " " .. 98) |
|
2427 WriteLnToConsole("") |
|
2428 |
|
2429 for i = 0, (placedCount-1) do |
|
2430 if placedType[i] == loc("Waypoint Placement Mode") then |
|
2431 table.insert(waypointList, |
|
2432 " AddWayPoint(" .. |
|
2433 placedX[i] ..", " .. |
|
2434 placedY[i] ..")" |
|
2435 ) |
|
2436 table.insert(hFlagList, " " .. placedX[i] .. " " .. placedY[i] .. " " .. "0") |
|
2437 table.insert(previewDataList, " PreviewWayPoint(" .. placedX[i] ..", " .. placedY[i] .. ")") |
|
2438 end |
|
2439 end |
|
2440 |
|
2441 for i = 0, (placedCount-1) do |
|
2442 if placedType[i] == loc("Girder Placement Mode") then |
|
2443 table.insert(girderList, |
|
2444 " LoadSprite(" .. |
|
2445 placedX[i] ..", " .. |
|
2446 placedY[i] ..", sprAmGirder, " .. |
|
2447 placedFrame[i] .. -- the rotation/frame |
|
2448 ", " .. |
|
2449 placedTint[i] ..", " .. -- "nil, " .. -- color |
|
2450 "nil, nil, nil, " .. |
|
2451 placedLandFlags[i] .. ")" --the landType |
|
2452 ) |
|
2453 table.insert(hFlagList, " " .. placedX[i] .. " " .. placedY[i] .. " " .. placedHWMapFlag[i]) |
|
2454 table.insert(previewDataList, " PreviewGirder(" .. placedX[i] ..", " .. placedY[i] .. ", " .. placedFrame[i] .. ")") |
|
2455 end |
|
2456 end |
|
2457 |
|
2458 for i = 0, (placedCount-1) do |
|
2459 if placedType[i] == loc("Rubber Placement Mode") then |
|
2460 table.insert(rubberList, |
|
2461 " LoadSprite(" .. |
|
2462 placedX[i] ..", " .. |
|
2463 placedY[i] ..", sprAmRubber, " .. |
|
2464 placedFrame[i] .. |
|
2465 ", " .. |
|
2466 placedTint[i] ..", " .. -- "nil, " .. -- color |
|
2467 "nil, nil, nil, " .. |
|
2468 "lfBouncy)" --placedLandFlags[i] .. ")" --the landType |
|
2469 ) |
|
2470 table.insert(hFlagList, " " .. placedX[i] .. " " .. placedY[i] .. " " .. placedHWMapFlag[i]) |
|
2471 table.insert(previewDataList, " PreviewRubber(" .. placedX[i] ..", " .. placedY[i] .. ", " .. placedFrame[i] .. ")") |
|
2472 end |
|
2473 end |
|
2474 |
|
2475 for i = 0, (placedCount-1) do |
|
2476 if placedType[i] == loc("Sprite Placement Mode") then |
|
2477 table.insert(spriteList, |
|
2478 " LoadSprite(" .. |
|
2479 placedX[i] ..", " .. |
|
2480 placedY[i] ..", " .. placedSprite[i] .. ", " .. |
|
2481 placedFrame[i] .. -- I think this is the frame, can't remember |
|
2482 ", " .. |
|
2483 placedTint[i] ..", " .. -- "nil, " .. -- color |
|
2484 "nil, nil, nil, " .. |
|
2485 placedLandFlags[i] .. ")" --the landType |
|
2486 ) |
|
2487 end |
|
2488 end |
|
2489 |
|
2490 AppendGearList(waypointList, " ------ WAYPOINT LIST ------") |
|
2491 AppendGearList(girderList, " ------ GIRDER LIST ------") |
|
2492 AppendGearList(rubberList, " ------ RUBBER LIST ------") |
|
2493 AppendGearList(spriteList, " ------ SPRITE LIST ------") |
|
2494 |
|
2495 SaveGearData() |
|
2496 |
|
2497 WriteLnToConsole(" --END CORE DATA--") |
|
2498 |
|
2499 |
|
2500 WriteLnToConsole("") |
|
2501 WriteLnToConsole(" LoadHogWeapons()") |
|
2502 WriteLnToConsole("") |
|
2503 WriteLnToConsole("end") |
|
2504 WriteLnToConsole("") |
|
2505 |
|
2506 WriteLnToConsole("") |
|
2507 WriteLnToConsole("function onGameStart()") |
|
2508 WriteLnToConsole("") |
|
2509 WriteLnToConsole(" LoadGearData()") |
|
2510 WriteLnToConsole(" DetermineMissionGoal()") |
|
2511 WriteLnToConsole("") |
|
2512 WriteLnToConsole("end") |
|
2513 WriteLnToConsole("") |
|
2514 |
|
2515 WriteLnToConsole("") |
|
2516 WriteLnToConsole("function onNewTurn()") |
|
2517 WriteLnToConsole(" --insert code according to taste") |
|
2518 WriteLnToConsole("end") |
|
2519 WriteLnToConsole("") |
|
2520 |
|
2521 WriteLnToConsole("") |
|
2522 WriteLnToConsole("function onGameTick()") |
|
2523 WriteLnToConsole(" runOnGears(UpdateTagCircles)") |
|
2524 WriteLnToConsole("end") |
|
2525 WriteLnToConsole("") |
|
2526 |
|
2527 WriteLnToConsole("function UpdateTagCircles(gear)") |
|
2528 WriteLnToConsole(" if getGearValue(gear,\"tag\") ~= nil then") |
|
2529 WriteLnToConsole(" if getGearValue(gear,\"tCirc\") == nil then") |
|
2530 WriteLnToConsole(" setGearValue(gear, \"tCirc\",AddVisualGear(0,0,vgtCircle,0,true))") |
|
2531 WriteLnToConsole(" end") |
|
2532 WriteLnToConsole("") |
|
2533 WriteLnToConsole(" if getGearValue(gear,\"tag\") == \"victory\" then") |
|
2534 WriteLnToConsole(" SetVisualGearValues(getGearValue(gear,\"tCirc\"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0xff0000ff)") |
|
2535 WriteLnToConsole(" elseif getGearValue(gear,\"tag\") == \"failure\" then") |
|
2536 WriteLnToConsole(" SetVisualGearValues(getGearValue(gear,\"tCirc\"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0x00ff00ff)") |
|
2537 WriteLnToConsole(" elseif getGearValue(gear,\"tag\") == \"collection\" then") |
|
2538 WriteLnToConsole(" SetVisualGearValues(getGearValue(gear,\"tCirc\"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0x0000ffff)") |
|
2539 WriteLnToConsole(" end") |
|
2540 WriteLnToConsole(" end") |
|
2541 WriteLnToConsole("end") |
|
2542 WriteLnToConsole("") |
|
2543 |
|
2544 WriteLnToConsole("function CheckForConditions(gear)") |
|
2545 WriteLnToConsole(" if getGearValue(gear,\"tag\") == \"victory\" then") |
|
2546 WriteLnToConsole(" victoryObj = victoryObj +1") |
|
2547 WriteLnToConsole(" elseif getGearValue(gear,\"tag\") == \"failure\" then") |
|
2548 WriteLnToConsole(" failObj = failObj +1") |
|
2549 WriteLnToConsole(" elseif getGearValue(gear,\"tag\") == \"collection\" then") |
|
2550 WriteLnToConsole(" collectObj = collectObj +1") |
|
2551 WriteLnToConsole(" end") |
|
2552 WriteLnToConsole("end") |
|
2553 WriteLnToConsole("") |
|
2554 |
|
2555 WriteLnToConsole("function CheckForConclusion(gear)") |
|
2556 WriteLnToConsole("") |
|
2557 WriteLnToConsole(" if getGearValue(gear,\"tag\") == \"failure\" then ") |
|
2558 WriteLnToConsole(" EndGameIn(\"failure\")") |
|
2559 WriteLnToConsole(" else ") |
|
2560 WriteLnToConsole("") |
|
2561 WriteLnToConsole(" victoryObj = 0") |
|
2562 WriteLnToConsole(" failObj = 0") |
|
2563 WriteLnToConsole(" collectObj = 0") |
|
2564 WriteLnToConsole(" runOnGears(CheckForConditions)") |
|
2565 WriteLnToConsole("") |
|
2566 WriteLnToConsole(" if GetGearType(gear) ~= gtCase then") |
|
2567 WriteLnToConsole("") |
|
2568 WriteLnToConsole(" victoryObj = victoryObj - 1 ") |
|
2569 WriteLnToConsole("") |
|
2570 WriteLnToConsole(" if (victoryObj == 0) and (collectObj == 0) then") |
|
2571 WriteLnToConsole(" EndGameIn(\"victory\")") |
|
2572 WriteLnToConsole(" end") |
|
2573 WriteLnToConsole("") |
|
2574 WriteLnToConsole(" else") |
|
2575 WriteLnToConsole("") |
|
2576 WriteLnToConsole(" if (GetGearMessage(gear) == 256) and (getGearValue(gear,\"tag\") == \"collection\") then ") |
|
2577 WriteLnToConsole(" if GetHogLevel(CurrentHedgehog) ~= 0 then") |
|
2578 WriteLnToConsole(" EndGameIn(\"failure\")") |
|
2579 WriteLnToConsole(" else") |
|
2580 WriteLnToConsole(" collectObj = collectObj - 1") |
|
2581 WriteLnToConsole(" if (victoryObj == 0) and (collectObj == 0) then") |
|
2582 WriteLnToConsole(" EndGameIn(\"victory\")") |
|
2583 WriteLnToConsole(" end") |
|
2584 WriteLnToConsole(" end") |
|
2585 WriteLnToConsole(" elseif (GetGearMessage(gear) == 0) and (getGearValue(gear,\"tag\") == \"victory\") then") |
|
2586 WriteLnToConsole(" victoryObj = victoryObj - 1") |
|
2587 WriteLnToConsole(" if (victoryObj == 0) and (collectObj == 0) then ") |
|
2588 WriteLnToConsole(" EndGameIn(\"victory\")") |
|
2589 WriteLnToConsole(" end") |
|
2590 WriteLnToConsole(" else") |
|
2591 WriteLnToConsole(" EndGameIn(\"failure\")") |
|
2592 WriteLnToConsole(" end") |
|
2593 WriteLnToConsole("") |
|
2594 WriteLnToConsole(" end") |
|
2595 WriteLnToConsole("") |
|
2596 WriteLnToConsole(" end") |
|
2597 WriteLnToConsole("") |
|
2598 WriteLnToConsole("end") |
|
2599 WriteLnToConsole("") |
|
2600 |
|
2601 WriteLnToConsole("function DetermineMissionGoal()") |
|
2602 WriteLnToConsole("") |
|
2603 WriteLnToConsole(" victoryObj = 0") |
|
2604 WriteLnToConsole(" failObj = 0") |
|
2605 WriteLnToConsole(" collectObj = 0") |
|
2606 WriteLnToConsole(" vComment = \"\"") |
|
2607 WriteLnToConsole(" fComment = \"\"") |
|
2608 WriteLnToConsole(" collectComment = \"\"") |
|
2609 WriteLnToConsole("") |
|
2610 WriteLnToConsole(" runOnGears(CheckForConditions)") |
|
2611 WriteLnToConsole("") |
|
2612 WriteLnToConsole(" if victoryObj > 0 then ") |
|
2613 WriteLnToConsole(" if victoryObj == 1 then ") |
|
2614 WriteLnToConsole(" vComment = loc(\"Destroy the red target\")") |
|
2615 WriteLnToConsole(" else ") |
|
2616 WriteLnToConsole(" vComment = loc(\"Destroy the red targets\")") |
|
2617 WriteLnToConsole(" end") |
|
2618 -- WriteLnToConsole(" else") |
|
2619 -- WriteLnToConsole(" vComment = loc(\"Destroy the enemy.\")") |
|
2620 WriteLnToConsole(" end") |
|
2621 WriteLnToConsole("") |
|
2622 WriteLnToConsole(" if collectObj > 0 then ") |
|
2623 WriteLnToConsole(" if collectObj == 1 then ") |
|
2624 WriteLnToConsole(" collectComment = loc(\"Collect the blue target\")") |
|
2625 WriteLnToConsole(" else ") |
|
2626 WriteLnToConsole(" collectComment = loc(\"Collect all the blue targets\")") |
|
2627 WriteLnToConsole(" end") |
|
2628 WriteLnToConsole(" end") |
|
2629 WriteLnToConsole("") |
|
2630 WriteLnToConsole(" if (collectObj == 0) and (victoryObj == 0) then") |
|
2631 WriteLnToConsole(" vComment = loc(\"Destroy the enemy.\")") |
|
2632 WriteLnToConsole(" end") |
|
2633 WriteLnToConsole("") |
|
2634 WriteLnToConsole(" if failObj > 0 then ") |
|
2635 WriteLnToConsole(" if failObj == 1 then ") |
|
2636 WriteLnToConsole(" fComment = loc(\"The green target must survive\")") |
|
2637 WriteLnToConsole(" else ") |
|
2638 WriteLnToConsole(" fComment = loc(\"The green targets must survive\")") |
|
2639 WriteLnToConsole(" end") |
|
2640 WriteLnToConsole(" end") |
|
2641 WriteLnToConsole("") |
|
2642 WriteLnToConsole(" ShowMission(loc(\"User Challenge\"), loc(\"Mission Goals\") .. \":\", collectComment .. \"|\" .. vComment .. \"|\" .. fComment, 0, 0)") |
|
2643 WriteLnToConsole("") |
|
2644 WriteLnToConsole("end") |
|
2645 |
|
2646 WriteLnToConsole("") |
|
2647 WriteLnToConsole("function isATrackedGear(gear)") |
|
2648 WriteLnToConsole(" if (GetGearType(gear) == gtHedgehog) or") |
|
2649 WriteLnToConsole(" (GetGearType(gear) == gtExplosives) or") |
|
2650 WriteLnToConsole(" (GetGearType(gear) == gtMine) or") |
|
2651 WriteLnToConsole(" (GetGearType(gear) == gtSMine) or") |
|
2652 WriteLnToConsole(" (GetGearType(gear) == gtAirMine) or") |
|
2653 WriteLnToConsole(" (GetGearType(gear) == gtTarget) or") |
|
2654 WriteLnToConsole(" (GetGearType(gear) == gtKnife) or") |
|
2655 WriteLnToConsole(" (GetGearType(gear) == gtPortal) or") |
|
2656 WriteLnToConsole(" (GetGearType(gear) == gtCase)") |
|
2657 WriteLnToConsole(" then") |
|
2658 WriteLnToConsole(" return(true)") |
|
2659 WriteLnToConsole(" else") |
|
2660 WriteLnToConsole(" return(false)") |
|
2661 WriteLnToConsole(" end") |
|
2662 WriteLnToConsole("end") |
|
2663 WriteLnToConsole("") |
|
2664 |
|
2665 WriteLnToConsole("") |
|
2666 WriteLnToConsole("function onGearAdd(gear)") |
|
2667 |
|
2668 --WriteLnToConsole(" if GetGearType(gear) == gtJetpack then") |
|
2669 --WriteLnToConsole(" ufoGear = gear") |
|
2670 --WriteLnToConsole(" if (ufoFuel ~= 0) then") |
|
2671 --WriteLnToConsole(" SetHealth(ufoGear, ufoFuel)") |
|
2672 --WriteLnToConsole(" end") |
|
2673 --WriteLnToConsole(" end") |
|
2674 |
|
2675 WriteLnToConsole(" if isATrackedGear(gear) then") |
|
2676 WriteLnToConsole(" trackGear(gear)") |
|
2677 --WriteLnToConsole(" if GetGearType(gear) == gtPortal then") |
|
2678 --WriteLnToConsole(" setGearValue(gear,\"life\",portalDistance)") |
|
2679 --WriteLnToConsole(" end") |
|
2680 |
|
2681 WriteLnToConsole(" end") |
|
2682 WriteLnToConsole("end") |
|
2683 WriteLnToConsole("") |
|
2684 |
|
2685 WriteLnToConsole("") |
|
2686 WriteLnToConsole("function EndGameIn(c)") |
|
2687 WriteLnToConsole("") |
|
2688 WriteLnToConsole(" teamCounter = 0") |
|
2689 WriteLnToConsole(" lastRecordedTeam = \"\" ") |
|
2690 WriteLnToConsole(" for i = 1, #hhs do") |
|
2691 WriteLnToConsole("") |
|
2692 WriteLnToConsole(" if GetHogTeamName(hhs[i]) ~= lastRecordedTeam then --er, is this okay without nill checks?") |
|
2693 WriteLnToConsole("") |
|
2694 WriteLnToConsole(" lastRecordedTeam = GetHogTeamName(hhs[i])") |
|
2695 WriteLnToConsole(" teamCounter = teamCounter + 1") |
|
2696 WriteLnToConsole(" if teamCounter == 9 then") |
|
2697 WriteLnToConsole(" teamCounter = 1") |
|
2698 WriteLnToConsole(" end") |
|
2699 WriteLnToConsole("") |
|
2700 WriteLnToConsole(" if (c == \"victory\") and (GetHogLevel(hhs[i]) ~= 0) then") |
|
2701 WriteLnToConsole(" DismissTeam(GetHogTeamName(hhs[i]))") |
|
2702 WriteLnToConsole(" ShowMission(loc(\"User Challenge\"), loc(\"MISSION SUCCESSFUL\"), loc(\"Congratulations!\"), 0, 0)") |
|
2703 WriteLnToConsole(" elseif (c == \"failure\") and (GetHogLevel(hhs[i]) == 0) then") |
|
2704 WriteLnToConsole(" DismissTeam(GetHogTeamName(hhs[i]))") |
|
2705 WriteLnToConsole(" ShowMission(loc(\"User Challenge\"), loc(\"MISSION FAILED\"), loc(\"Oh no! Just try again!\"), -amSkip, 0)") |
|
2706 WriteLnToConsole(" elseif (c == \"victory\") and (GetHogLevel(hhs[i]) == 0) then") |
|
2707 WriteLnToConsole(" PlaySound(sndVictory,hhs[i]) -- check if we actually need this") |
|
2708 WriteLnToConsole(" end") |
|
2709 WriteLnToConsole("") |
|
2710 WriteLnToConsole(" end") |
|
2711 WriteLnToConsole("") |
|
2712 WriteLnToConsole(" end") |
|
2713 WriteLnToConsole("") |
|
2714 WriteLnToConsole("end") |
|
2715 WriteLnToConsole("") |
|
2716 |
|
2717 WriteLnToConsole("") |
|
2718 WriteLnToConsole("function onGearDelete(gear)") |
|
2719 WriteLnToConsole("") |
|
2720 WriteLnToConsole(" --insert code according to taste") |
|
2721 --WriteLnToConsole(" if GetGearType(gear) == gtJetpack then") |
|
2722 --WriteLnToConsole(" ufoGear = nil") |
|
2723 --WriteLnToConsole(" end") |
|
2724 WriteLnToConsole("") |
|
2725 WriteLnToConsole(" if isATrackedGear(gear) then") |
|
2726 WriteLnToConsole("") |
|
2727 WriteLnToConsole(" if getGearValue(gear,\"tag\") ~= nil then") |
|
2728 WriteLnToConsole(" CheckForConclusion(gear)") |
|
2729 WriteLnToConsole(" end") |
|
2730 |
|
2731 --WriteLnToConsole(" if getGearValue(gear,\"tag\") == \"failure\" then") |
|
2732 --WriteLnToConsole(" EndGameIn(\"failure\")") |
|
2733 --WriteLnToConsole(" elseif getGearValue(gear,\"tag\") == \"victory\" then") |
|
2734 --WriteLnToConsole(" EndGameIn(\"victory\")") |
|
2735 --WriteLnToConsole(" end") |
|
2736 WriteLnToConsole("") |
|
2737 WriteLnToConsole(" if getGearValue(gear, \"tCirc\") ~= nil then") |
|
2738 WriteLnToConsole(" DeleteVisualGear(getGearValue(gear, \"tCirc\"))") |
|
2739 WriteLnToConsole(" end") |
|
2740 WriteLnToConsole("") |
|
2741 WriteLnToConsole(" trackDeletion(gear)") |
|
2742 WriteLnToConsole("") |
|
2743 WriteLnToConsole(" end") |
|
2744 WriteLnToConsole("") |
|
2745 WriteLnToConsole("end") |
|
2746 WriteLnToConsole("") |
|
2747 |
|
2748 WriteLnToConsole("") |
|
2749 WriteLnToConsole("--enable and/or alter code according to taste") |
|
2750 WriteLnToConsole("function onAmmoStoreInit()") |
|
2751 WriteLnToConsole("") |
|
2752 |
|
2753 WriteLnToConsole(" for i = 1, #wepArray do") |
|
2754 WriteLnToConsole(" SetAmmo(wepArray[i], 0, 0, 0, 1)") |
|
2755 WriteLnToConsole(" end") |
|
2756 WriteLnToConsole("") |
|
2757 --WriteLnToConsole(" SetAmmo(amBazooka, 2, 0, 0, 0)") |
|
2758 --WriteLnToConsole(" SetAmmo(amGrenade, 1, 0, 0, 0)") |
|
2759 --WriteLnToConsole(" SetAmmo(amRope, 9, 0, 0, 0)") |
|
2760 WriteLnToConsole(" SetAmmo(amSkip, 9, 0, 0, 0)") |
|
2761 WriteLnToConsole("") |
|
2762 WriteLnToConsole("end") |
|
2763 WriteLnToConsole("") |
|
2764 |
|
2765 WriteLnToConsole("------ END GENERATED MISSION ------") |
|
2766 |
|
2767 -- at this point, generation for the missions/training output is intended to stop |
|
2768 |
|
2769 WriteLnToConsole("") |
|
2770 WriteLnToConsole("function GeneratePreviewData()") |
|
2771 WriteLnToConsole("") |
|
2772 for i = 1, #previewDataList do |
|
2773 WriteLnToConsole(previewDataList[i]) |
|
2774 end |
|
2775 WriteLnToConsole("") |
|
2776 WriteLnToConsole("end") |
|
2777 WriteLnToConsole("") |
|
2778 |
|
2779 ConvertGearDataToHWPText() |
|
2780 |
|
2781 WriteLnToConsole("------ END GENERATED SCRIPT ------") |
|
2782 |
|
2783 AddCaption(loc("Level Data Saved!")) |
|
2784 |
|
2785 end |
|
2786 |
|
2787 ---------------------------------- |
|
2788 -- some special effects handling |
|
2789 ---------------------------------- |
|
2790 function SmokePuff(x,y,c) |
|
2791 tempE = AddVisualGear(x, y, vgtSmoke, 0, false) |
|
2792 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) |
|
2793 SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, 1, g9, c ) |
|
2794 end |
|
2795 |
|
2796 function HandleGearBasedRankingEffects(gear) |
|
2797 if getGearValue(gear, "ranking") ~= nil then |
|
2798 SmokePuff(GetX(gear), GetY(gear),GetRankedColour(getGearValue(gear, "ranking"))) |
|
2799 end |
|
2800 end |
|
2801 |
|
2802 function HandleRankingEffects() |
|
2803 for i = 1, #shoppaPX do |
|
2804 SmokePuff(shoppaPX[i], shoppaPY[i], GetRankedColour(shoppaPR[i])) |
|
2805 end |
|
2806 runOnHogs(HandleGearBasedRankingEffects) |
|
2807 end |
|
2808 |
|
2809 function UpdateTagCircles(gear) |
|
2810 |
|
2811 if getGearValue(gear,"tag") ~= nil then |
|
2812 |
|
2813 if cat[cIndex] == loc("Tagging Mode") then |
|
2814 |
|
2815 -- generate circs for tagged gears that don't have a circ yet (new) |
|
2816 if getGearValue(gear,"tCirc") == nil then |
|
2817 setGearValue(gear, "tCirc",AddVisualGear(0,0,vgtCircle,0,true)) |
|
2818 end |
|
2819 |
|
2820 if getGearValue(gear,"tag") == "victory" then |
|
2821 SetVisualGearValues(getGearValue(gear,"tCirc"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0xff0000ff) |
|
2822 elseif getGearValue(gear,"tag") == "failure" then |
|
2823 SetVisualGearValues(getGearValue(gear,"tCirc"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0x00ff00ff) |
|
2824 elseif getGearValue(gear,"tag") == "collection" then |
|
2825 SetVisualGearValues(getGearValue(gear,"tCirc"), GetX(gear), GetY(gear), 100, 255, 1, 10, 0, 150, 3, 0x0000ffff) |
|
2826 end |
|
2827 |
|
2828 else |
|
2829 SetVisualGearValues(getGearValue(gear,"tCirc"), GetX(gear), GetY(gear), 0, 1, 1, 10, 0, 1, 1, 0x00000000) |
|
2830 end |
|
2831 |
|
2832 end |
|
2833 |
|
2834 end |
|
2835 |
|
2836 -- handle short range portal gun |
|
2837 function PortalEffects(gear) |
|
2838 |
|
2839 if GetGearType(gear) == gtPortal then |
|
2840 |
|
2841 tag = GetTag(gear) |
|
2842 if tag == 0 then |
|
2843 col = 0xfab02aFF -- orange ball |
|
2844 elseif tag == 1 then |
|
2845 col = 0x00FF00FF -- orange portal |
|
2846 elseif tag == 2 then |
|
2847 col = 0x364df7FF -- blue ball |
|
2848 elseif tag == 3 then |
|
2849 col = 0xFFFF00FF -- blue portal |
|
2850 end |
|
2851 |
|
2852 if (tag == 0) or (tag == 2) then -- i.e ball form |
|
2853 tempE = AddVisualGear(GetX(gear), GetY(gear), vgtDust, 0, true) |
|
2854 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) |
|
2855 SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, 1, g9, col ) |
|
2856 |
|
2857 remLife = getGearValue(gear,"life") |
|
2858 remLife = remLife - 1 |
|
2859 setGearValue(gear, "life", remLife) |
|
2860 |
|
2861 if remLife == 0 then |
|
2862 |
|
2863 tempE = AddVisualGear(GetX(gear)+15, GetY(gear), vgtSmoke, 0, true) |
|
2864 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) |
|
2865 SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col ) |
|
2866 |
|
2867 tempE = AddVisualGear(GetX(gear)-15, GetY(gear), vgtSmoke, 0, true) |
|
2868 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) |
|
2869 SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col ) |
|
2870 |
|
2871 tempE = AddVisualGear(GetX(gear), GetY(gear)+15, vgtSmoke, 0, true) |
|
2872 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) |
|
2873 SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col ) |
|
2874 |
|
2875 tempE = AddVisualGear(GetX(gear), GetY(gear)-15, vgtSmoke, 0, true) |
|
2876 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) |
|
2877 SetVisualGearValues(tempE, g1, g2, g3, g4, g5, g6, g7, g8, g9, col ) |
|
2878 |
|
2879 |
|
2880 PlaySound(sndVaporize) |
|
2881 DeleteGear(gear) |
|
2882 |
|
2883 end |
|
2884 |
|
2885 end |
|
2886 |
|
2887 end |
|
2888 |
|
2889 end |
|
2890 |
|
2891 function updateHelp() |
|
2892 |
|
2893 if (GetCurAmmoType() ~= amGirder) and (GetCurAmmoType() ~= amRubber) and (GetCurAmmoType() ~= amAirAttack) then |
|
2894 |
|
2895 ShowMission ( |
|
2896 loc("HEDGE EDITOR"), |
|
2897 loc("(well... kind of...)"), |
|
2898 loc("Place Girder: Girder") .. "|" .. |
|
2899 loc("Place Rubber: Rubber") .. "|" .. |
|
2900 loc("Place Gear: Air Attack") .. "|" .. |
|
2901 loc("Change Selection: [Up], [Down], [Left], [Right]") .. "|" .. |
|
2902 loc("Toggle Help: Precise+1 (While a tool is selected)") .. "|" .. |
|
2903 " " .. "|" .. |
|
2904 loc("COMMANDS: (Use while no weapon is selected)") .. "|" .. |
|
2905 loc("Save Level: Precise+4") .. "|" .. |
|
2906 loc("Toggle Editing Weapons and Tools: Precise+2") .. "|" .. |
|
2907 " " .. "|" .. |
|
2908 --" " .. "|" .. |
|
2909 "", 4, 5000 |
|
2910 ) |
|
2911 --4 |
|
2912 elseif cat[cIndex] == loc("Girder Placement Mode") then |
|
2913 |
|
2914 ShowMission ( |
|
2915 loc("GIRDER PLACEMENT MODE"), |
|
2916 loc("Use this mode to place girders"), |
|
2917 loc("Place Girder: [Left Click]") .. "|" .. |
|
2918 loc("Change Rotation: [Left], [Right]") .. "|" .. |
|
2919 loc("Change LandFlag: [1], [2], [3], [4]") .. "|" .. |
|
2920 " " .. "|" .. |
|
2921 loc("1 - Normal Girder") .. "|" .. |
|
2922 loc("2 - Indestructible Girder") .. "|" .. |
|
2923 loc("3 - Icy Girder") .. "|" .. |
|
2924 loc("4 - Bouncy Girder") .. "|" .. |
|
2925 " " .. "|" .. |
|
2926 loc("Deletion Mode: [5]") .. "|" .. |
|
2927 loc("Toggle Help: Precise+1") .. "|" .. |
|
2928 "", -amGirder, 60000 |
|
2929 ) |
|
2930 |
|
2931 elseif cat[cIndex] == loc("Rubber Placement Mode") then |
|
2932 |
|
2933 ShowMission ( |
|
2934 loc("RUBBER PLACEMENT MODE"), |
|
2935 loc("Use this mode to place rubberbands"), |
|
2936 loc("Place Object: [Left Click]") .. "|" .. |
|
2937 loc("Change Rotation: [Left], [Right]") .. "|" .. |
|
2938 --"Change LandFlag: [1], [2], [3]" .. "|" .. |
|
2939 --" " .. "|" .. |
|
2940 loc("1 - Normal Rubber") .. "|" .. |
|
2941 --"2 - Indestructible Rubber" .. "|" .. |
|
2942 --"3 - Icy Rubber" .. "|" .. |
|
2943 " " .. "|" .. |
|
2944 loc("Deletion Mode: [5]") .. "|" .. |
|
2945 loc("Toggle Help: Precise+1") .. "|" .. |
|
2946 "", -amRubber, 60000 |
|
2947 ) |
|
2948 |
|
2949 elseif cat[cIndex] == loc("Barrel Placement Mode") then |
|
2950 |
|
2951 ShowMission ( |
|
2952 loc("BARREL PLACEMENT MODE"), |
|
2953 loc("Use this mode to place barrels"), |
|
2954 loc("Place Object: [Left Click]") .. "|" .. |
|
2955 loc("Change Health: [Left], [Right]") .. "|" .. |
|
2956 " " .. "|" .. |
|
2957 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
2958 loc("Toggle Help: Precise+1") .. "|" .. |
|
2959 "", 8, 60000 |
|
2960 ) |
|
2961 |
|
2962 elseif cat[cIndex] == loc("Cleaver Placement Mode") then |
|
2963 |
|
2964 ShowMission ( |
|
2965 loc("CLEAVER MINE PLACEMENT MODE"), |
|
2966 loc("Use this mode to place cleavers"), |
|
2967 loc("Place Object: [Left Click]") .. "|" .. |
|
2968 " " .. "|" .. |
|
2969 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
2970 loc("Toggle Help: Precise+1") .. "|" .. |
|
2971 "", -amKnife, 60000 |
|
2972 ) |
|
2973 |
|
2974 elseif cat[cIndex] == loc("Target Placement Mode") then |
|
2975 |
|
2976 ShowMission ( |
|
2977 loc("TARGET MINE PLACEMENT MODE"), |
|
2978 loc("Use this mode to place targets"), |
|
2979 loc("Place Object: [Left Click]") .. "|" .. |
|
2980 " " .. "|" .. |
|
2981 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
2982 loc("Toggle Help: Precise+1") .. "|" .. |
|
2983 "", 1, 60000 |
|
2984 ) |
|
2985 |
|
2986 elseif cat[cIndex] == loc("Waypoint Placement Mode") then |
|
2987 |
|
2988 ShowMission ( |
|
2989 loc("WAYPOINT PLACEMENT MODE"), |
|
2990 loc("Use this mode to waypoints"), |
|
2991 loc("Place Waypoint: [Left Click]") .. "|" .. |
|
2992 " " .. "|" .. |
|
2993 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
2994 loc("Toggle Help: Precise+1") .. "|" .. |
|
2995 "", -amAirAttack, 60000 |
|
2996 ) |
|
2997 |
|
2998 elseif cat[cIndex] == loc("Mine Placement Mode") then |
|
2999 |
|
3000 ShowMission ( |
|
3001 loc("MINE PLACEMENT MODE"), |
|
3002 loc("Use this mode to place mines"), |
|
3003 loc("Place Object: [Left Click]") .. "|" .. |
|
3004 loc("Change Timer (in milliseconds): [Left], [Right]") .. "|" .. |
|
3005 " " .. "|" .. |
|
3006 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3007 loc("Toggle Help: Precise+1") .. "|" .. |
|
3008 "", -amMine, 60000 |
|
3009 ) |
|
3010 |
|
3011 elseif cat[cIndex] == loc("Sticky Mine Placement Mode") then |
|
3012 |
|
3013 ShowMission ( |
|
3014 loc("STiCKY MINE PLACEMENT MODE"), |
|
3015 loc("Use this mode to place sticky mines"), |
|
3016 loc("Place Object: [Left Click]") .. "|" .. |
|
3017 " " .. "|" .. |
|
3018 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3019 loc("Toggle Help: Precise+1") .. "|" .. |
|
3020 "", -amSMine, 60000 |
|
3021 ) |
|
3022 |
|
3023 elseif cat[cIndex] == loc("Air Mine Placement Mode") then |
|
3024 |
|
3025 ShowMission ( |
|
3026 loc("AIR MINE PLACEMENT MODE"), |
|
3027 loc("Use this mode to place air mines"), |
|
3028 loc("Place Object: [Left Click]") .. "|" .. |
|
3029 " " .. "|" .. |
|
3030 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3031 loc("Toggle Help: Precise+1") .. "|" .. |
|
3032 "", -amAirMine, 60000 |
|
3033 ) |
|
3034 |
|
3035 elseif cat[cIndex] == loc("Weapon Crate Placement Mode") then |
|
3036 |
|
3037 ShowMission ( |
|
3038 "WEAPON CRATE PLACEMENT MODE", |
|
3039 loc("Use this mode to place weapon crates"), |
|
3040 loc("Place Object: [Left Click]") .. "|" .. |
|
3041 loc("Change Content: [Left], [Right]") .. "|" .. |
|
3042 " " .. "|" .. |
|
3043 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3044 loc("Toggle Help: Precise+1") .. "|" .. |
|
3045 "", 7, 60000 |
|
3046 ) |
|
3047 |
|
3048 elseif cat[cIndex] == loc("Utility Crate Placement Mode") then |
|
3049 |
|
3050 ShowMission ( |
|
3051 loc("UTILITY CRATE PLACEMENT MODE"), |
|
3052 loc("Use this mode to place utility crates"), |
|
3053 loc("Place Object: [Left Click]") .. "|" .. |
|
3054 loc("Change Content: [Left], [Right]") .. "|" .. |
|
3055 " " .. "|" .. |
|
3056 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3057 loc("Toggle Help: Precise+1") .. "|" .. |
|
3058 "", 5, 60000 |
|
3059 ) |
|
3060 |
|
3061 elseif cat[cIndex] == loc("Health Crate Placement Mode") then |
|
3062 |
|
3063 ShowMission ( |
|
3064 loc("HEALTH CRATE PLACEMENT MODE"), |
|
3065 loc("Use this mode to place utility crates"), |
|
3066 loc("Place Object: [Left Click]") .. "|" .. |
|
3067 loc("Change Health Boost: [Left], [Right]") .. "|" .. |
|
3068 " " .. "|" .. |
|
3069 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3070 loc("Toggle Help: Precise+1") .. "|" .. |
|
3071 "", 6, 60000 |
|
3072 ) |
|
3073 |
|
3074 elseif cat[cIndex] == loc("Advanced Repositioning Mode") then |
|
3075 |
|
3076 ShowMission ( |
|
3077 loc("ADVANCED REPOSITIONING MODE"), |
|
3078 loc("Use this mode to select and reposition gears"), |
|
3079 loc("[Left], [Right]: Change between selection and placement mode.") .. "|" .. |
|
3080 " " .. "|" .. |
|
3081 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3082 loc("Toggle Help: Precise+1") .. "|" .. |
|
3083 "", -amAirAttack, 60000 |
|
3084 ) |
|
3085 |
|
3086 elseif cat[cIndex] == loc("Sprite Modification Mode") then |
|
3087 |
|
3088 ShowMission ( |
|
3089 loc("SPRITE MODIFICATION MODE"), |
|
3090 "", |
|
3091 "Use this mode to select, modify, or delete existing girders," .. "|" .. |
|
3092 "rubbers, or sprites." .. "|" .. |
|
3093 "[Left], [Right]: Change between land-flag" .. "|" .. |
|
3094 --"[Left], [Right]: Change between selection, land-flag" .. "|" .. |
|
3095 "modification, and deletion modes." .. "|" .. |
|
3096 "While in modification mode, you can " .. "|" .. |
|
3097 "change land-flag by clicking on an object." .. "|" .. |
|
3098 loc("Set LandFlag: [1], [2], [3], [4]") .. "|" .. |
|
3099 " " .. "|" .. |
|
3100 loc("1 - Normal Land") .. "|" .. |
|
3101 loc("2 - Indestructible Land") .. "|" .. |
|
3102 loc("3 - Icy Land") .. "|" .. |
|
3103 loc("4 - Bouncy Land") .. "|" .. |
|
3104 " " .. "|" .. |
|
3105 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3106 loc("Toggle Help: Precise+1") .. "|" .. |
|
3107 "", -amAirAttack, 60000 |
|
3108 ) |
|
3109 |
|
3110 elseif cat[cIndex] == loc("Sprite Placement Mode") then |
|
3111 |
|
3112 ShowMission ( |
|
3113 loc("SPRITE PLACEMENT MODE"), |
|
3114 loc("Use this mode to place custom sprites."), |
|
3115 loc("[Left], [Right]: Change sprite selection") .. "|" .. |
|
3116 loc("Set LandFlag: [1], [2], [3], [4]") .. "|" .. |
|
3117 " " .. "|" .. |
|
3118 loc("1 - Normal Land") .. "|" .. |
|
3119 loc("2 - Indestructible Land") .. "|" .. |
|
3120 loc("3 - Icy Land") .. "|" .. |
|
3121 loc("4 - Bouncy Land") .. "|" .. |
|
3122 " " .. "|" .. |
|
3123 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3124 loc("Toggle Help: Precise+1") .. "|" .. |
|
3125 "", 2, 60000 |
|
3126 ) |
|
3127 |
|
3128 --elseif cat[cIndex] == loc("Sprite Testing Mode") then |
|
3129 |
|
3130 -- ShowMission ( |
|
3131 -- "SPRITE TESTING MODE", |
|
3132 -- "Use this mode to test sprites before you place them.", |
|
3133 -- "Place Temporary Visual Test: [Left Click]" .. "|" .. |
|
3134 -- "[Left], [Right]: Change between sprites." .. "|" .. |
|
3135 -- " " .. "|" .. |
|
3136 -- loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3137 -- loc("Toggle Help: Precise+1") .. "|" .. |
|
3138 -- "", 3, 60000 |
|
3139 -- ) |
|
3140 |
|
3141 elseif cat[cIndex] == loc("Tagging Mode") then |
|
3142 |
|
3143 ShowMission ( |
|
3144 loc("TAGGING MODE"), |
|
3145 loc("Use this mode to tag gears for win/lose conditions."), |
|
3146 loc("Tag Gear: [Left Click]") .. "|" .. |
|
3147 loc("[Left], [Right]: Change between tagging modes.") .. "|" .. |
|
3148 " " .. "|" .. |
|
3149 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3150 loc("Toggle Help: Precise+1") .. "|" .. |
|
3151 "", 3, 60000 |
|
3152 ) |
|
3153 elseif cat[cIndex] == loc("Hog Identity Mode") then |
|
3154 |
|
3155 ShowMission ( |
|
3156 loc("HOG IDENTITY MODE"), |
|
3157 loc("Use this mode to give a hog a preset identity and weapons."), |
|
3158 loc("Set Identity: [Left Click]") .. "|" .. |
|
3159 loc("[Left], [Right]: Change between identities.") .. "|" .. |
|
3160 " " .. "|" .. |
|
3161 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3162 loc("Toggle Help: Precise+1") .. "|" .. |
|
3163 "", 3, 60000 |
|
3164 ) |
|
3165 |
|
3166 elseif cat[cIndex] == loc("Team Identity Mode") then |
|
3167 |
|
3168 ShowMission ( |
|
3169 loc("TEAM IDENTITY MODE"), |
|
3170 loc("Use this mode to give an entire team themed hats and names."), |
|
3171 loc("Set Identity: [Left Click]") .. "|" .. |
|
3172 loc("[Left], [Right]: Change between identities.") .. "|" .. |
|
3173 " " .. "|" .. |
|
3174 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3175 loc("Toggle Help: Precise+1") .. "|" .. |
|
3176 "", 3, 60000 |
|
3177 ) |
|
3178 |
|
3179 elseif cat[cIndex] == loc("Health Modification Mode") then |
|
3180 |
|
3181 ShowMission ( |
|
3182 loc("HEALTH MODIFICATION MODE"), |
|
3183 loc("Use this mode to set the health of hogs."), |
|
3184 loc("Set Health: [Left Click]") .. "|" .. |
|
3185 loc("[Left], [Right]: Change health value.") .. "|" .. |
|
3186 " " .. "|" .. |
|
3187 loc("Change Placement Mode: [Up], [Down]") .. "|" .. |
|
3188 loc("Toggle Help: Precise+1") .. "|" .. |
|
3189 "", 3, 60000 |
|
3190 ) |
|
3191 |
|
3192 end |
|
3193 |
|
3194 |
|
3195 if helpDisabled == true then |
|
3196 HideMission() |
|
3197 end |
|
3198 |
|
3199 end |
|
3200 |
|
3201 -- called in onGameTick() |
|
3202 function HandleHedgeEditor() |
|
3203 |
|
3204 if CurrentHedgehog ~= nil then |
|
3205 |
|
3206 genTimer = genTimer + 1 |
|
3207 |
|
3208 |
|
3209 tSprCol = 0x00000000 |
|
3210 tempFrame = 0 |
|
3211 xDisplacement = 42 |
|
3212 yDisplacement = 42 |
|
3213 |
|
3214 if (curWep == amAirAttack) then |
|
3215 |
|
3216 --wowaweewa, holyeeeee shite this is badly hacked (please rewrite when less lazy/morefeatures) |
|
3217 dCol = 0xFFFFFFFF |
|
3218 dFrame = 0 |
|
3219 dAngle = 0 |
|
3220 if (cat[cIndex] == loc("Mine Placement Mode")) then |
|
3221 dSprite = sprBotlevels--sprMineOff |
|
3222 dFrame = 1 |
|
3223 elseif (cat[cIndex] == loc("Sticky Mine Placement Mode")) then |
|
3224 dSprite = sprBotlevels--sprSMineOff |
|
3225 dFrame = 2 |
|
3226 elseif (cat[cIndex] == loc("Air Mine Placement Mode")) then |
|
3227 dSprite = sprAirMine |
|
3228 elseif (cat[cIndex] == loc("Barrel Placement Mode")) then |
|
3229 dSprite = sprExplosives |
|
3230 elseif (cat[cIndex] == loc("Health Crate Placement Mode")) then |
|
3231 dSprite = sprFAid |
|
3232 elseif (cat[cIndex] == loc("Weapon Crate Placement Mode")) then |
|
3233 dSprite = sprCase |
|
3234 elseif (cat[cIndex] == loc("Utility Crate Placement Mode")) then |
|
3235 dSprite = sprUtility |
|
3236 elseif (cat[cIndex] == loc("Target Placement Mode")) then |
|
3237 dSprite = sprTarget |
|
3238 elseif (cat[cIndex] == loc("Cleaver Placement Mode")) then |
|
3239 dAngle = 270 |
|
3240 dSprite = sprKnife |
|
3241 elseif (cat[cIndex] == loc("Sprite Placement Mode")) then |
|
3242 dSprite = reducedSpriteIDArray[pIndex] |
|
3243 dFrame = 1 |
|
3244 else |
|
3245 dCol = 0xFFFFFF00 |
|
3246 dSprite = sprArrow |
|
3247 end |
|
3248 |
|
3249 if CG == nil then |
|
3250 CG = AddVisualGear(CursorX, CursorY, vgtStraightShot,0,true,3) |
|
3251 end |
|
3252 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(CG) |
|
3253 SetVisualGearValues(CG, CursorX, CursorY, 0, 0, dAngle, dFrame, 1000, dSprite, 1000, dCol) |
|
3254 |
|
3255 |
|
3256 |
|
3257 if crateSprite == nil then |
|
3258 crateSprite = AddVisualGear(CursorX, CursorY-35, vgtStraightShot,0,true,3) |
|
3259 for i = 1, 4 do |
|
3260 tSpr[i] = AddVisualGear(CursorX, CursorY-35, vgtStraightShot,0,true,3) |
|
3261 end |
|
3262 end |
|
3263 |
|
3264 |
|
3265 if (cat[cIndex] == loc("Weapon Crate Placement Mode")) or (cat[cIndex] == loc("Utility Crate Placement Mode")) then |
|
3266 if (cat[cIndex] == loc("Weapon Crate Placement Mode")) then |
|
3267 tArr = atkArray |
|
3268 else |
|
3269 tArr = utilArray |
|
3270 end |
|
3271 |
|
3272 tSprCol = 0xFFFFFFFF |
|
3273 tempFrame = tArr[pIndex][3] |
|
3274 |
|
3275 end |
|
3276 |
|
3277 else |
|
3278 if CG ~= nil then |
|
3279 SetVisualGearValues(CG, 0, 0, 0, 0, 0, 0, 1000, sprArrow, 1000, 0xFFFFFF00) |
|
3280 end |
|
3281 end |
|
3282 |
|
3283 SetVisualGearValues(crateSprite, CursorX+xDisplacement, CursorY+yDisplacement, 0, 0, dAngle, tempFrame, 1000, sprAMAmmos, 1000, tSprCol) |
|
3284 SetVisualGearValues(tSpr[1], CursorX+xDisplacement-2, CursorY+yDisplacement-2, 0, 0, dAngle, 10, 1000, sprTarget, 1000, tSprCol) |
|
3285 SetVisualGearValues(tSpr[2], CursorX+xDisplacement-2, CursorY+yDisplacement+2, 0, 0, dAngle, 10, 1000, sprTarget, 1000, tSprCol) |
|
3286 SetVisualGearValues(tSpr[3], CursorX+xDisplacement+2, CursorY+yDisplacement-2, 0, 0, dAngle, 10, 1000, sprTarget, 1000, tSprCol) |
|
3287 SetVisualGearValues(tSpr[4], CursorX+xDisplacement+2, CursorY+yDisplacement+2, 0, 0, dAngle, 10, 1000, sprTarget, 1000, tSprCol) |
|
3288 |
|
3289 |
|
3290 if genTimer >= 100 then |
|
3291 |
|
3292 genTimer = 0 |
|
3293 |
|
3294 --if destroyMap == true then |
|
3295 -- BlowShitUpPartTwo() |
|
3296 --end |
|
3297 |
|
3298 curWep = GetCurAmmoType() |
|
3299 |
|
3300 HandleRankingEffects() |
|
3301 runOnGears(PortalEffects) |
|
3302 |
|
3303 -- change to girder mode on weapon swap |
|
3304 if (cIndex ~= 1) and (curWep == amGirder) then |
|
3305 cIndex = 1 |
|
3306 RedefineSubset() |
|
3307 updateHelp() |
|
3308 elseif (cIndex ~=2) and (curWep == amRubber) then |
|
3309 cIndex = 2 |
|
3310 RedefineSubset() |
|
3311 updateHelp() |
|
3312 -- change to generic mode if girder no longer selected |
|
3313 elseif (cIndex == 1) and (curWep ~= amGirder) then |
|
3314 cIndex = 3 -- was 2 |
|
3315 RedefineSubset() |
|
3316 --updateHelp() |
|
3317 elseif (cIndex == 2) and (curWep ~= amRubber) then |
|
3318 cIndex = 3 --new |
|
3319 RedefineSubset() |
|
3320 --updateHelp() |
|
3321 |
|
3322 end |
|
3323 |
|
3324 -- update display selection criteria |
|
3325 if (curWep == amGirder) or (curWep == amRubber) or (curWep == amAirAttack) then |
|
3326 AddCaption(cat[cIndex],0xffba00ff,capgrpMessage) |
|
3327 AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2) |
|
3328 if superDelete == true then |
|
3329 AddCaption(loc("Warning: Deletition Mode Active"),0xffba00ff,capgrpAmmoinfo) |
|
3330 end |
|
3331 end |
|
3332 |
|
3333 |
|
3334 if sSprite ~= nil then |
|
3335 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite) |
|
3336 SetVisualGearValues(sSprite, g1, g2, 0, 0, g5, g6, 10000, g8, 10000, g10 ) |
|
3337 --AddCaption(g7) |
|
3338 end |
|
3339 |
|
3340 end |
|
3341 |
|
3342 end |
|
3343 |
|
3344 |
|
3345 if (ufoFuel ~= 0) then |
|
3346 if ufoFuel == 2000 then |
|
3347 SetHealth(ufoGear, 2000) |
|
3348 end |
|
3349 end |
|
3350 |
|
3351 -- kinda lazy, but at least we don't have to do elaborate tacking elsewhere |
|
3352 SetVisualGearValues(sCirc, 0, 0, 0, 1, 1, 10, 0, 1, 1, 0x00000000) |
|
3353 --update selected gear display |
|
3354 if (cat[cIndex] == loc("Advanced Repositioning Mode")) and (sGear ~= nil) then |
|
3355 SetVisualGearValues(sCirc, GetX(sGear), GetY(sGear), 100, 255, 1, 10, 0, 300, 3, 0xff00ffff) |
|
3356 elseif (cat[cIndex] == loc("Sprite Modification Mode")) and (sSprite ~= nil) then |
|
3357 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite) |
|
3358 SetVisualGearValues(sSprite, g1, g2, 0, 0, g5, g6, 10000, g8, 10000, g10 ) |
|
3359 elseif (cat[cIndex] == loc("Tagging Mode")) then |
|
3360 if (sGear ~= nil) or (closestGear ~= nil) then |
|
3361 --recently disabled |
|
3362 --SetVisualGearValues(sCirc, GetX(sGear), GetY(sGear), 0, 1, 1, 10, 0, 1, 1, 0x00000000) |
|
3363 closestGear = nil |
|
3364 sGear = nil |
|
3365 end |
|
3366 end |
|
3367 |
|
3368 |
|
3369 runOnGears(UpdateTagCircles) |
|
3370 |
|
3371 |
|
3372 -- some kind of target detected, tell me your story |
|
3373 if cGear ~= nil then |
|
3374 |
|
3375 x,y = GetGearTarget(cGear) |
|
3376 |
|
3377 if GetGearType(cGear) == gtAirAttack then |
|
3378 DeleteGear(cGear) |
|
3379 PlaceObject(x, y) |
|
3380 elseif GetGearType(cGear) == gtGirder then |
|
3381 |
|
3382 CGR = GetState(cGear) |
|
3383 |
|
3384 -- improve rectangle test based on CGR when you can be bothered |
|
3385 --if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then |
|
3386 -- AddCaption(loc("Invalid Girder Placement"),0xffba00ff,capgrpVolume) |
|
3387 --else |
|
3388 PlaceObject(x, y) |
|
3389 --end |
|
3390 |
|
3391 -- this allows the girder tool to be used like a mining laser |
|
3392 |
|
3393 --[[ |
|
3394 |
|
3395 if CGR < 4 then |
|
3396 AddGear(x, y, gtGrenade, 0, 0, 0, 1) |
|
3397 elseif CGR == 4 then |
|
3398 g = AddGear(x-30, y, gtGrenade, 0, 0, 0, 1) |
|
3399 g = AddGear(x+30, y, gtGrenade, 0, 0, 0, 1) |
|
3400 elseif CGR == 5 then ------- |
|
3401 g = AddGear(x+30, y+30, gtGrenade, 0, 0, 0, 1) |
|
3402 g = AddGear(x-30, y-30, gtGrenade, 0, 0, 0, 1) |
|
3403 elseif CGR == 6 then |
|
3404 g = AddGear(x, y+30, gtGrenade, 0, 0, 0, 1) |
|
3405 g = AddGear(x, y-30, gtGrenade, 0, 0, 0, 1) |
|
3406 elseif CGR == 7 then ------- |
|
3407 g = AddGear(x+30, y-30, gtGrenade, 0, 0, 0, 1) |
|
3408 g = AddGear(x-30, y+30, gtGrenade, 0, 0, 0, 1) |
|
3409 end |
|
3410 ]] |
|
3411 end |
|
3412 |
|
3413 end |
|
3414 |
|
3415 end |
|
3416 |
|
3417 -------------------------------------------------- |
|
3418 -- EVENT HANDLERS |
|
3419 -------------------------------------------------- |
|
3420 |
|
3421 function commandMode() |
|
3422 if (preciseOn == true) and ((GetCurAmmoType() == amNothing) or (GetCurAmmoType() == amSkip)) then |
|
3423 return(true) |
|
3424 else |
|
3425 return(false) |
|
3426 end |
|
3427 end |
|
3428 |
|
3429 function onTimer(s) |
|
3430 |
|
3431 superDelete = false |
|
3432 if (commandMode() == true) and (s == 4) then |
|
3433 SaveLevelData() -- positions of crates, etc |
|
3434 elseif (commandMode() == true) and (s == 2) then |
|
3435 if GetAmmoCount(CurrentHedgehog, amAirAttack) == 100 then |
|
3436 SetEditingWeps(0) |
|
3437 AddCaption(loc("The editor weapons and tools have been removed!")) |
|
3438 else |
|
3439 SetEditingWeps(100) |
|
3440 AddCaption(loc("The editor weapons and tools have been added!")) |
|
3441 end |
|
3442 elseif (preciseOn == true) and (s == 1) then |
|
3443 if (GetCurAmmoType() == amGirder) or (GetCurAmmoType() == amRubber) or (GetCurAmmoType() == amAirAttack) then |
|
3444 helpDisabled = not(helpDisabled) |
|
3445 AddCaption("Help Disabled: " .. BoolToString(helpDisabled),0xffba00ff,capgrpVolume) |
|
3446 updateHelp() |
|
3447 end |
|
3448 elseif (cat[cIndex] == loc("Sprite Placement Mode")) or (cat[cIndex] == loc("Girder Placement Mode")) or (cat[cIndex] == loc("Rubber Placement Mode")) or (cat[cIndex] == loc("Sprite Modification Mode")) then |
|
3449 |
|
3450 if (cat[cIndex] == loc("Rubber Placement Mode")) and (s ~= 5) then |
|
3451 landType = lfBouncy |
|
3452 AddCaption(loc("Bouncy Land"),0xffba00ff,capgrpAmmoinfo) |
|
3453 elseif s == 1 then |
|
3454 landType = 0 |
|
3455 AddCaption(loc("Normal Land"),0xffba00ff,capgrpAmmoinfo) |
|
3456 elseif s == 2 then |
|
3457 landType = lfIndestructible |
|
3458 AddCaption(loc("Indestructible Land"),0xffba00ff,capgrpAmmoinfo) |
|
3459 elseif s == 3 then |
|
3460 landType = lfIce |
|
3461 AddCaption(loc("Icy Land"),0xffba00ff,capgrpAmmoinfo) |
|
3462 elseif (s == 4) then --and (cat[cIndex] == "Sprite Placement Mode") then |
|
3463 landType = lfBouncy |
|
3464 AddCaption(loc("Bouncy Land"),0xffba00ff,capgrpAmmoinfo) |
|
3465 elseif (s == 5) and (cat[cIndex] ~= loc("Sprite Modification Mode")) then |
|
3466 superDelete = true |
|
3467 -- this and the above should probably be shown in another place where the other |
|
3468 -- two add captions are displayed for this kinda thing |
|
3469 --AddCaption(loc("Warning: Deletition Mode Active"),0xffba00ff,capgrpAmmoinfo) |
|
3470 end |
|
3471 elseif pMode[pIndex] == loc("Selection Mode") then |
|
3472 setGearValue(sGear, "ranking", s) |
|
3473 end |
|
3474 |
|
3475 end |
|
3476 |
|
3477 function onPrecise() |
|
3478 |
|
3479 preciseOn = true |
|
3480 |
|
3481 --ParseCommand("voicepack " .. "Surfer") |
|
3482 --AddCaption(GetHogGrave(CurrentHedgehog)) |
|
3483 |
|
3484 --if (pMode[pIndex] == "Selection Mode") and (closestGear ~= nil) then |
|
3485 -- menuEnabled = not(menuEnabled) |
|
3486 --showmenu |
|
3487 --end |
|
3488 |
|
3489 --BlowShitUp() |
|
3490 |
|
3491 --[[ |
|
3492 frameID = 1 |
|
3493 visualSprite = sprAmGirder--reducedSpriteIDArray[pIndex] |
|
3494 --visualSprite = spriteIDArray[pIndex] |
|
3495 tempE = AddVisualGear(1, 1, vgtStraightShot, 0, true,1) |
|
3496 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(tempE) |
|
3497 SetVisualGearValues(tempE, g1, g2, 0, 0, g5, frameID, g7, visualSprite, g9, g10 ) |
|
3498 |
|
3499 ]] |
|
3500 |
|
3501 end |
|
3502 |
|
3503 function onPreciseUp() |
|
3504 preciseOn = false |
|
3505 end |
|
3506 |
|
3507 --[[function onLJump() |
|
3508 end |
|
3509 |
|
3510 function onHJump() |
|
3511 end]] |
|
3512 |
|
3513 --[[function UpdateMenu() |
|
3514 |
|
3515 preMenuCfg = loc("Use the arrow keys to navigate this menu") .. "|" |
|
3516 postMenuCfg = loc("Press [Fire] to accept this configuration.") |
|
3517 |
|
3518 menu = { |
|
3519 loc("Walls Required") .. ": " .. #wTouched .. "|", |
|
3520 loc("Surf Before Crate") .. ": " .. BoolToCfgTxt(requireSurfer) .. "|", |
|
3521 loc("Attack From Rope") .. ": " .. BoolToCfgTxt(AFR) .. "|", |
|
3522 loc("Super Weapons") .. ": " .. BoolToCfgTxt(allowCrazyWeps) .. "|" |
|
3523 } |
|
3524 end |
|
3525 |
|
3526 function HandleStartingStage() |
|
3527 |
|
3528 temp = menu[menuIndex] |
|
3529 menu[menuIndex] = "--> " .. menu[menuIndex] |
|
3530 |
|
3531 missionComment = "" |
|
3532 for i = 1, #menu do |
|
3533 missionComment = missionComment .. menu[i] |
|
3534 end |
|
3535 |
|
3536 ShowMission ( |
|
3537 loc("HEDGE EDITOR") .. " 0.4", |
|
3538 loc("Edit gear properties"), |
|
3539 preMenuCfg.. |
|
3540 missionComment .. |
|
3541 postMenuCfg .. |
|
3542 --" " .. "|" .. |
|
3543 "", 4, 300000 |
|
3544 ) |
|
3545 |
|
3546 menu[menuIndex] = temp |
|
3547 |
|
3548 end |
|
3549 |
|
3550 function UpdateMenuCategoryOrSomething() |
|
3551 temp = menu[1] |
|
3552 menu = {} |
|
3553 if temp == "Initialisation Menu" then |
|
3554 for i = 1, #initMenuArray do |
|
3555 menu[i] = initMenuArray[i] .. ": " .. initMenuArray[2] |
|
3556 end |
|
3557 elseif temp == "GameFlag Menu" then |
|
3558 for i = 1, #gameFlagList do |
|
3559 menu[i] = gameFlagList[1] .. ": " .. BoolToStr(gameFlagList[2]) |
|
3560 end |
|
3561 elseif temp == "Ammo Menu" then |
|
3562 for i = 1, #atkArray do --except, this should be per hog, not overall :( |
|
3563 --menu[i] = atkArray[i][2] .. ": " .. atkArray[i][3] |
|
3564 menu[i] = atkArray[i][2] .. ": " .. getGearValue(sGear,atkArray[i][1]) |
|
3565 end |
|
3566 -- you should run through all the hogs and assign them ammo values based on the |
|
3567 -- ammo set, yea, let's write that function in 5th |
|
3568 for i = #menu, #utilArray do |
|
3569 end |
|
3570 end |
|
3571 end |
|
3572 |
|
3573 function doMenuShit(d) |
|
3574 |
|
3575 if d == "up" then |
|
3576 menuIndex = menuIndex -1 |
|
3577 if menuIndex == 0 then |
|
3578 menuIndex = #menu |
|
3579 end |
|
3580 elseif d == "down" then |
|
3581 menuIndex = menuIndex +1 |
|
3582 if menuIndex > #menu then |
|
3583 menuIndex = 1 |
|
3584 end |
|
3585 elseif d == "left" then |
|
3586 |
|
3587 elseif d == "right" then |
|
3588 |
|
3589 end |
|
3590 |
|
3591 end]] |
|
3592 |
|
3593 --------------------------------------------------------------- |
|
3594 -- Cycle through selection subsets (by changing pIndex, pMode) |
|
3595 -- i.e health of barrels, medikits, |
|
3596 -- timer of mines |
|
3597 -- contents of crates etc. |
|
3598 --------------------------------------------------------------- |
|
3599 function onLeft() |
|
3600 |
|
3601 leftHeld = true |
|
3602 rightHeld = false |
|
3603 |
|
3604 --if menuEnabled == true then |
|
3605 --doMenuShit("left") |
|
3606 |
|
3607 --else -- normal case |
|
3608 |
|
3609 pIndex = pIndex - 1 |
|
3610 if pIndex == 0 then |
|
3611 pIndex = #pMode |
|
3612 end |
|
3613 |
|
3614 if (curWep == amGirder) or (curWep == amRubber) or (curWep == amAirAttack) then |
|
3615 AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2) |
|
3616 end |
|
3617 |
|
3618 --end |
|
3619 |
|
3620 end |
|
3621 |
|
3622 function onRight() |
|
3623 |
|
3624 leftHeld = false |
|
3625 rightHeld = true |
|
3626 |
|
3627 --if menuEnabled == true then |
|
3628 --doMenuShit("right") |
|
3629 |
|
3630 --else -- normal case |
|
3631 |
|
3632 pIndex = pIndex + 1 |
|
3633 if pIndex > #pMode then |
|
3634 pIndex = 1 |
|
3635 end |
|
3636 |
|
3637 if (curWep == amGirder) or (curWep == amRubber) or (curWep == amAirAttack) then |
|
3638 AddCaption(pMode[pIndex],0xffba00ff,capgrpMessage2) |
|
3639 end |
|
3640 |
|
3641 --end |
|
3642 |
|
3643 end |
|
3644 |
|
3645 --------------------------------------------------------- |
|
3646 -- Cycle through primary categories (by changing cIndex) |
|
3647 -- i.e mine, sticky mine, barrels |
|
3648 -- health/weapon/utility crate, placement of gears |
|
3649 --------------------------------------------------------- |
|
3650 function onUp() |
|
3651 |
|
3652 --if menuEnabled == true then |
|
3653 --doMenuShit("up") |
|
3654 |
|
3655 --elseif (curWep ~= amGirder) then |
|
3656 if (curWep ~= amGirder) then |
|
3657 --AddCaption(cIndex) |
|
3658 cIndex = cIndex - 1 |
|
3659 if (cIndex == 1) or (cIndex == 2) then --1 --we no longer hit girder by normal means |
|
3660 cIndex = #cat |
|
3661 end |
|
3662 |
|
3663 RedefineSubset() |
|
3664 updateHelp() |
|
3665 |
|
3666 end |
|
3667 |
|
3668 end |
|
3669 |
|
3670 function onDown() |
|
3671 |
|
3672 --if menuEnabled == true then |
|
3673 --doMenuShit("down") |
|
3674 |
|
3675 --elseif (curWep ~= amGirder) then |
|
3676 if (curWep ~= amGirder) then |
|
3677 cIndex = cIndex + 1 |
|
3678 if cIndex > #cat then |
|
3679 cIndex = 3 -- 2 ----we no longer hit girder by normal means |
|
3680 end |
|
3681 |
|
3682 RedefineSubset() |
|
3683 updateHelp() |
|
3684 |
|
3685 end |
|
3686 |
|
3687 end |
|
3688 |
|
3689 function onParameters() |
|
3690 |
|
3691 parseParams() |
|
3692 |
|
3693 ufoFuel = tonumber(params["ufoFuel"]) |
|
3694 if ufoFuel == nil then |
|
3695 ufoFuel = 0 |
|
3696 end |
|
3697 |
|
3698 mapID = tonumber(params["m"]) |
|
3699 |
|
3700 --15 is a good short range portal, for what it's worth |
|
3701 if tonumber(params["portalDistance"]) ~= nil then |
|
3702 portalDistance = div(tonumber(params["portalDistance"]),5) |
|
3703 end |
|
3704 |
|
3705 if portalDistance == nil then |
|
3706 portalDistance = 5000 |
|
3707 end |
|
3708 |
|
3709 if params["helpDisabled"] == "true" then |
|
3710 helpDisabled = true |
|
3711 end |
|
3712 |
|
3713 if mapID == nil then |
|
3714 mapID = 1 |
|
3715 end |
|
3716 |
|
3717 end |
|
3718 |
|
3719 function onGameInit() |
|
3720 |
|
3721 -- perhaps we can get some of this better info in parsecommandoverride |
|
3722 --Map = "Islands" |
|
3723 --Theme = "Deepspace" |
|
3724 --Seed = "{bacb2f87-f316-4691-a333-3bcfc4fb3d88}" |
|
3725 --MapGen = 0 -- 0:generated map, 1:generated maze, 2:hand drawn map |
|
3726 --TemplateFilter = 5 -- small=1,med=2,large=3,cavern=4,wacky=5 |
|
3727 |
|
3728 if mapID == nil then |
|
3729 mapID = 1 |
|
3730 end |
|
3731 |
|
3732 -- read gameflags and assign their values to the gameflaglist array |
|
3733 for i = 1, #gameFlagList do |
|
3734 if band(GameFlags, gameFlagList[i][3]) ~= 0 then |
|
3735 gameFlagList[i][2] = true |
|
3736 else |
|
3737 gameFlagList[i][2] = false |
|
3738 end |
|
3739 end |
|
3740 |
|
3741 Explosives = 0 |
|
3742 MinesNum = 0 |
|
3743 |
|
3744 --GameFlags = GameFlags + gfInfAttack |
|
3745 EnableGameFlags(gfInfAttack, gfDisableWind) |
|
3746 |
|
3747 RedefineSubset() |
|
3748 |
|
3749 end |
|
3750 |
|
3751 function onGameStart() |
|
3752 |
|
3753 trackTeams() |
|
3754 |
|
3755 |
|
3756 InterpretPoints() |
|
3757 LoadLevelData() |
|
3758 |
|
3759 ShowMission ( |
|
3760 loc("HEDGE EDITOR"), |
|
3761 loc("(well... kind of...)"), |
|
3762 loc("Place Girder: Girder") .. "|" .. |
|
3763 loc("Place Rubber: Rubber") .. "|" .. |
|
3764 loc("Place Gear: Air Attack") .. "|" .. |
|
3765 loc("Change Selection: [Up], [Down], [Left], [Right]") .. "|" .. |
|
3766 loc("Toggle Help: Precise+1 (While a tool is selected)") .. "|" .. |
|
3767 " " .. "|" .. |
|
3768 loc("COMMANDS: (Use while no weapon is selected)") .. "|" .. |
|
3769 loc("Save Level: Precise+4") .. "|" .. |
|
3770 loc("Toggle Editing Weapons and Tools: Precise+2") .. "|" .. |
|
3771 " " .. "|" .. |
|
3772 --" " .. "|" .. |
|
3773 "", 4, 5000 |
|
3774 ) |
|
3775 |
|
3776 |
|
3777 sCirc = AddVisualGear(0,0,vgtCircle,0,true) |
|
3778 SetVisualGearValues(sCirc, 0, 0, 100, 255, 1, 10, 0, 40, 3, 0xffba00ff) |
|
3779 |
|
3780 |
|
3781 frameID = 1 |
|
3782 visualSprite = sprAmGirder |
|
3783 sSprite = AddVisualGear(0, 0, vgtStraightShot, 0, true,1) |
|
3784 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 = GetVisualGearValues(sSprite) |
|
3785 SetVisualGearValues(sSprite, 1, 1, 0, 0, g5, frameID, 20000, visualSprite, 20000, g10 ) |
|
3786 |
|
3787 SetAmmoDelay(amAirAttack,0) |
|
3788 SetAmmoDelay(amGirder,0) |
|
3789 SetAmmoDelay(amRubber,0) |
|
3790 --SetAmmoDelay(amNapalm,0) |
|
3791 --SetAmmoDelay(amDrillStrike,0) |
|
3792 --SetAmmoDelay(amMineStrike,0) |
|
3793 |
|
3794 end |
|
3795 |
|
3796 function SetEditingWeps(ammoCount) |
|
3797 |
|
3798 AddAmmo(CurrentHedgehog, amAirAttack, ammoCount) |
|
3799 AddAmmo(CurrentHedgehog, amGirder, ammoCount) |
|
3800 AddAmmo(CurrentHedgehog, amRubber, ammoCount) |
|
3801 --AddAmmo(CurrentHedgehog, amPortalGun, ammoCount) |
|
3802 AddAmmo(CurrentHedgehog, amTeleport, ammoCount) |
|
3803 AddAmmo(CurrentHedgehog, amRope, ammoCount) |
|
3804 --AddAmmo(CurrentHedgehog, amJetpack, ammoCount) |
|
3805 --AddAmmo(CurrentHedgehog, amParachute, ammoCount) |
|
3806 AddAmmo(CurrentHedgehog, amSwitch, 100) --ammoCount |
|
3807 AddAmmo(CurrentHedgehog, amSkip, 100) |
|
3808 |
|
3809 end |
|
3810 |
|
3811 function clearAmmo(gear) |
|
3812 for i = 1, #atkArray do |
|
3813 AddAmmo(gear,atkArray[i][1],0) |
|
3814 end |
|
3815 for i = 1, #utilArray do |
|
3816 AddAmmo(gear,utilArray[i][1],0) |
|
3817 end |
|
3818 end |
|
3819 |
|
3820 -- the below two functions allow you to set up a themed team. |
|
3821 -- one day, it'd be nice to be able to set their voice/flag/grave |
|
3822 -- ingame at this point, too, but for now, this is impossible |
|
3823 function SetTeamIdentity(gear) |
|
3824 tName = pMode[pIndex] |
|
3825 hIndex = 1 |
|
3826 hArr = {} |
|
3827 for i = 1,#preMadeTeam[pIndex][2] do |
|
3828 table.insert(hArr,preMadeTeam[pIndex][2][i]) |
|
3829 end |
|
3830 nArr = {} |
|
3831 for i = 1,#preMadeTeam[pIndex][3] do |
|
3832 table.insert(nArr,preMadeTeam[pIndex][3][i]) |
|
3833 end |
|
3834 SetHogTeamName(gear, tName) |
|
3835 --runOnHogsInTeam(AssignTeam(gear),tName) |
|
3836 runOnHogs(AssignTeam) |
|
3837 end |
|
3838 |
|
3839 function AssignTeam(gear) |
|
3840 |
|
3841 if GetHogTeamName(gear) == tName then |
|
3842 |
|
3843 setGearValue(gear,"flag",preMadeTeam[pIndex][5]) |
|
3844 setGearValue(gear,"voice",preMadeTeam[pIndex][6]) |
|
3845 setGearValue(gear,"grave",preMadeTeam[pIndex][7]) |
|
3846 setGearValue(gear,"fort",preMadeTeam[pIndex][8]) |
|
3847 |
|
3848 if preMadeTeam[pIndex][4] == "R" then -- random team |
|
3849 |
|
3850 if #hArr > 0 then |
|
3851 --if there are unchosen hats left, choose one |
|
3852 --then remove it from the available list of hats |
|
3853 i = 1+GetRandom(#hArr) |
|
3854 SetHogHat(gear,hArr[i]) |
|
3855 table.remove(hArr,i) |
|
3856 else |
|
3857 -- choose any hat randomly |
|
3858 SetHogHat(gear,preMadeTeam[pIndex][2][1+GetRandom(#preMadeTeam[pIndex][2])]) |
|
3859 end |
|
3860 |
|
3861 if #nArr > 0 then |
|
3862 i = 1+GetRandom(#nArr) |
|
3863 SetHogName(gear,nArr[i]) |
|
3864 table.remove(nArr,i) |
|
3865 else |
|
3866 SetHogName(gear,preMadeTeam[pIndex][3][1+GetRandom(#preMadeTeam[pIndex][3])]) |
|
3867 end |
|
3868 |
|
3869 elseif preMadeTeam[pIndex][4] == "F" then -- fixed team w/ exactly 8 guys |
|
3870 SetHogName(gear,preMadeTeam[pIndex][3][hIndex]) |
|
3871 SetHogHat(gear,preMadeTeam[pIndex][2][hIndex]) |
|
3872 hIndex = hIndex +1 |
|
3873 else -- FR fixed random team with more or less than 8 guys |
|
3874 |
|
3875 if #hArr > 0 then |
|
3876 i = 1+GetRandom(#hArr) |
|
3877 SetHogHat(gear,hArr[i]) |
|
3878 SetHogName(gear,nArr[i]) |
|
3879 table.remove(hArr,i) |
|
3880 table.remove(nArr,i) |
|
3881 else |
|
3882 SetHogHat(gear,"NoHat") |
|
3883 SetHogName(gear,"Uninspiring hog") |
|
3884 end |
|
3885 |
|
3886 end |
|
3887 |
|
3888 end |
|
3889 |
|
3890 end |
|
3891 |
|
3892 -- allows you to set a sort of identity and weapon profile for a given hog |
|
3893 -- this should only really be used when perHogAmmo is enabled |
|
3894 function SetHogProfile(gear, pro) |
|
3895 |
|
3896 clearAmmo(gear) |
|
3897 |
|
3898 if pro == loc("Sniper") then |
|
3899 |
|
3900 SetHogName(gear,"Sniper") |
|
3901 SetHogHat(gear, "Sniper") |
|
3902 SetHealth(gear, 50) |
|
3903 AddAmmo(gear, amSniperRifle, 100) |
|
3904 AddAmmo(gear, amDEagle, 100) |
|
3905 |
|
3906 elseif pro == loc("Pyro") then |
|
3907 |
|
3908 SetHogName(gear,loc("Pyro")) |
|
3909 SetHogHat(gear, "Gasmask") |
|
3910 SetHealth(gear, 80) |
|
3911 AddAmmo(gear, amFlamethrower, 100) |
|
3912 AddAmmo(gear, amMolotov, 100) |
|
3913 AddAmmo(gear, amNapalm, 1) |
|
3914 |
|
3915 elseif pro == loc("Soldier") then |
|
3916 |
|
3917 SetHogName(gear,loc("Soldier")) |
|
3918 --SetHogHat(gear, "war_americanww2helmet") |
|
3919 SetHogHat(gear, "TeamSoldier") |
|
3920 SetHealth(gear, 100) |
|
3921 AddAmmo(gear, amBazooka, 100) |
|
3922 AddAmmo(gear, amShotgun, 100) |
|
3923 AddAmmo(gear, amMortar, 100) |
|
3924 |
|
3925 elseif pro == loc("Grenadier") then |
|
3926 |
|
3927 SetHogName(gear,loc("Grenadier")) |
|
3928 SetHogHat(gear, "war_desertgrenadier1") |
|
3929 SetHealth(gear, 100) |
|
3930 AddAmmo(gear, amGrenade, 100) |
|
3931 AddAmmo(gear, amClusterBomb, 100) |
|
3932 AddAmmo(gear, amGasBomb, 100) |
|
3933 |
|
3934 elseif pro == loc("Chef") then |
|
3935 |
|
3936 SetHogName(gear,loc("Chef")) |
|
3937 SetHogHat(gear, "chef") |
|
3938 SetHealth(gear, 65) |
|
3939 AddAmmo(gear, amGasBomb, 100) |
|
3940 AddAmmo(gear, amKnife, 100) |
|
3941 AddAmmo(gear, amCake, 1) |
|
3942 --AddAmmo(gear, amWatermelon, 1) |
|
3943 |
|
3944 elseif pro == loc("Ninja") then |
|
3945 |
|
3946 SetHogName(gear,loc("Ninja")) |
|
3947 SetHogHat(gear, "NinjaFull") |
|
3948 SetHealth(gear, 80) |
|
3949 AddAmmo(gear, amRope, 100) |
|
3950 AddAmmo(gear, amFirePunch, 100) |
|
3951 AddAmmo(gear, amParachute, 1) |
|
3952 |
|
3953 elseif pro == loc("Commander") then |
|
3954 |
|
3955 SetHogName(gear,loc("Commander")) |
|
3956 SetHogHat(gear, "sf_vega") |
|
3957 SetHealth(gear, 120) |
|
3958 AddAmmo(gear, amDEagle, 100) |
|
3959 AddAmmo(gear, amAirAttack, 2) |
|
3960 AddAmmo(gear, amNapalm, 1) |
|
3961 AddAmmo(gear, amDrillStrike, 1) |
|
3962 AddAmmo(gear, amMineStrike, 1) |
|
3963 |
|
3964 elseif pro == loc("Engineer") then |
|
3965 |
|
3966 SetHogName(gear,loc("Engineer")) |
|
3967 SetHogHat(gear, "Glasses") |
|
3968 SetHealth(gear, 45) |
|
3969 AddAmmo(gear, amGirder, 4) |
|
3970 AddAmmo(gear, amRubber, 2) |
|
3971 AddAmmo(gear, amLandGun, 2) |
|
3972 AddAmmo(gear, amBlowTorch, 100) |
|
3973 AddAmmo(gear, amPickHammer, 100) |
|
3974 |
|
3975 elseif pro == loc("Physicist") then |
|
3976 |
|
3977 SetHogName(gear,loc("Physicist")) |
|
3978 SetHogHat(gear, "lambda") |
|
3979 SetHealth(gear, 80) |
|
3980 AddAmmo(gear, amIceGun, 2) |
|
3981 AddAmmo(gear, amSineGun, 100) |
|
3982 AddAmmo(gear, amBee, 2) |
|
3983 AddAmmo(gear, amLowGravity, 100) |
|
3984 |
|
3985 elseif pro == loc("Trapper") then |
|
3986 |
|
3987 SetHogName(gear,loc("Trapper")) |
|
3988 SetHogHat(gear, "Skull") |
|
3989 SetHealth(gear, 100) |
|
3990 AddAmmo(gear, amMine, 100) |
|
3991 AddAmmo(gear, amSMine, 4) |
|
3992 AddAmmo(gear, amAirMine, 2) |
|
3993 AddAmmo(gear, amMolotov, 100) |
|
3994 |
|
3995 elseif pro == loc("Saint") then |
|
3996 |
|
3997 SetHogName(gear,loc("Saint")) |
|
3998 SetHogHat(gear, "angel") |
|
3999 SetHealth(gear, 200) |
|
4000 AddAmmo(gear, amSeduction, 100) |
|
4001 AddAmmo(gear, amInvulnerable, 100) |
|
4002 AddAmmo(gear, amIceGun, 2) |
|
4003 AddAmmo(gear, amHammer, 100) |
|
4004 AddAmmo(gear, amResurrector, 100) |
|
4005 |
|
4006 elseif pro == loc("Clown") then |
|
4007 |
|
4008 SetHogName(gear,loc("Clown")) |
|
4009 SetHogHat(gear, "clown-copper") |
|
4010 SetHealth(gear, 70) |
|
4011 AddAmmo(gear, amBaseballBat, 100) |
|
4012 AddAmmo(gear, amGasBomb, 100) |
|
4013 AddAmmo(gear, amBallgun, 1) |
|
4014 AddAmmo(gear, amKamikaze, 1) |
|
4015 --AddAmmo(gear, amPiano, 1) |
|
4016 |
|
4017 -- some other ideas/roles |
|
4018 -- relocator: portal, teleport, tardis, extra time, lasersite |
|
4019 -- vampire: vampire, whip, birdy, extra damage, seduction |
|
4020 -- flyboy: rc plane, deagle, whip, parachute, kamikaze |
|
4021 -- demo: drill, dynamite, mine, smine, blowtorch |
|
4022 -- alien: ufo, sine-gun, drill rocket |
|
4023 -- terminator: tardis, shotgun, cake, girder |
|
4024 -- yeti: ice-gun, firepunch, blowtorch |
|
4025 |
|
4026 end |
|
4027 |
|
4028 AddAmmo(gear, amSwitch, 100) |
|
4029 AddAmmo(gear, amSkip, 100) |
|
4030 |
|
4031 end |
|
4032 |
|
4033 function onNewTurn() |
|
4034 |
|
4035 -- regardless of our other ammo, give stuff that is useful for editing |
|
4036 SetEditingWeps(100) |
|
4037 if GetHogLevel(CurrentHedgehog) == 0 then |
|
4038 TurnTimeLeft = -1 -- is that turntime in your pocket? :D |
|
4039 else |
|
4040 TurnTimeLeft = 1 -- skip the computer's turn |
|
4041 end |
|
4042 |
|
4043 end |
|
4044 |
|
4045 function onGameTick() |
|
4046 HandleHedgeEditor() |
|
4047 end |
|
4048 |
|
4049 function isATrackedGear(gear) |
|
4050 if (GetGearType(gear) == gtHedgehog) or |
|
4051 (GetGearType(gear) == gtGrenade) or |
|
4052 (GetGearType(gear) == gtExplosives) or |
|
4053 (GetGearType(gear) == gtTarget) or |
|
4054 (GetGearType(gear) == gtKnife) or |
|
4055 (GetGearType(gear) == gtMine) or |
|
4056 (GetGearType(gear) == gtSMine) or |
|
4057 (GetGearType(gear) == gtPortal) or |
|
4058 (GetGearType(gear) == gtAirMine) or |
|
4059 (GetGearType(gear) == gtCase) |
|
4060 then |
|
4061 return(true) |
|
4062 else |
|
4063 return(false) |
|
4064 end |
|
4065 end |
|
4066 |
|
4067 -- track hedgehogs and placement gears |
|
4068 function onGearAdd(gear) |
|
4069 |
|
4070 if GetGearType(gear) == gtJetpack then |
|
4071 ufoGear = gear |
|
4072 if (ufoFuel ~= 0) then |
|
4073 SetHealth(ufoGear, ufoFuel) |
|
4074 end |
|
4075 end |
|
4076 |
|
4077 if GetGearType(gear) == gtHedgehog then |
|
4078 --table.insert(hhs, gear) |
|
4079 elseif (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtGirder) then |
|
4080 cGear = gear |
|
4081 end |
|
4082 |
|
4083 if isATrackedGear(gear) then |
|
4084 trackGear(gear) |
|
4085 |
|
4086 if GetGearType(gear) == gtPortal then |
|
4087 setGearValue(gear,"life",portalDistance) |
|
4088 end |
|
4089 |
|
4090 end |
|
4091 |
|
4092 end |
|
4093 |
|
4094 function onGearDelete(gear) |
|
4095 |
|
4096 if GetGearType(gear) == gtJetpack then |
|
4097 ufoGear = nil |
|
4098 end |
|
4099 |
|
4100 if (GetGearType(gear) == gtAirAttack) or (GetGearType(gear) == gtGirder) then |
|
4101 cGear = nil |
|
4102 end |
|
4103 |
|
4104 if isATrackedGear(gear) then |
|
4105 |
|
4106 if getGearValue(gear, "tCirc") ~= nil then |
|
4107 DeleteVisualGear(getGearValue(gear, "tCirc")) |
|
4108 end |
|
4109 |
|
4110 trackDeletion(gear) |
|
4111 |
|
4112 end |
|
4113 |
|
4114 end |
|
4115 |