1--[[ 2A Classic Fairytale: Dragon's Lair 3 4= SUMMARY = 5Hero must collect an utility crate on the other side of the river. 6To accomplish that, hero must first collect a series of crates with 7the rope and wipe out the cyborgs. 8The hero is one survivor of the previous missions. 9 10= GOALS = 11- Mission goal (leads to immediate victory): Collect utility crate at the right side of the river 12- First sub-goal: Collect (or destroy) a series of crates (all other utility crates) 13- Second sub-goal: Wipe out the cyborgs 14 15= FLOW CHART = 16- Choose hog to be hero (read from m5DeployedNum) 17- Cut scene: Intro 18- TBS 19| Player accomplishes first sub-goal first: 20 - Cut scene: Cyborg reveals second goal 21 - A ton of weapon crates and some rope crates spawn on the long platform 22| Player accomplshed second sub-goal first: 23 - Hero reminds player to collect/destroy remaining crates 24- Player accomplished both goals 25- Cut scene: Cyborg teleports hero to the long platform and congrats hero 26- Hero's ammo is cleared, all crates, mines, sticky mines and barrels are removed from platform 27- Spawn a portal gun crate on the long platform and also a teleportation crate further to the right 28- (These utilities can be used to finish the mission) 29- Player takes final crate at the very right 30> Victory 31 32]] 33 34HedgewarsScriptLoad("/Scripts/Locale.lua") 35HedgewarsScriptLoad("/Scripts/Animate.lua") 36 37-----------------------------Map-------------------------------------- 38local map = 39{ 40 "\0\91\4\253\131\0\88\0\46\0\0\91\0\49\131\15\196\0\53\0\15\196\0\53\131\15\196\4\250\0\255\242\7\179\131\1\128\7\214\0", 41 "\1\113\7\207\131\3\182\7\157\0\3\175\7\143\131\6\58\7\200\0\6\76\7\193\131\6\188\7\129\0\6\188\7\129\131\6\248\6\216\0", 42 "\6\248\6\216\131\7\52\8\14\0\10\206\8\0\131\11\203\6\65\0\11\203\6\65\131\12\18\7\66\0\12\18\7\69\131\16\0\7\69\0", 43 "\0\109\1\1\131\2\111\0\49\0\2\111\0\49\131\3\133\1\18\0\3\140\1\18\131\4\162\0\165\0\4\162\0\165\131\5\135\1\29\0", 44 "\5\145\1\22\131\8\84\0\232\0\8\84\0\232\131\9\26\0\70\0\9\26\0\70\131\10\5\1\4\0\10\48\0\243\131\10\2\1\8\0", 45 "\10\58\0\243\131\10\118\1\15\0\10\118\1\15\131\10\234\1\173\0\11\10\1\177\131\12\11\1\22\0\12\39\1\40\131\12\243\2\9\0", 46 "\12\243\2\9\131\13\106\0\165\0\13\131\0\176\131\15\186\1\78\0\1\244\0\81\136\0\120\0\84\0\1\99\0\123\137\0\130\0\215\0", 47 "\0\158\0\130\143\0\158\0\130\0\2\216\0\88\138\4\165\0\102\0\4\91\0\127\142\3\129\0\197\0\3\69\0\134\142\3\69\0\134\0", 48 "\4\215\0\120\143\8\88\0\134\0\8\187\0\84\139\8\187\0\84\0\8\239\0\70\135\8\239\0\70\0\8\60\0\187\138\5\99\0\222\0", 49 "\5\61\0\197\138\5\61\0\197\0\9\99\0\81\137\10\23\0\218\0\9\187\0\77\137\11\31\1\117\0\10\30\0\88\137\15\161\0\109\0", 50 "\15\126\0\225\144\13\177\0\116\0\15\150\0\144\139\15\157\1\26\0\10\202\0\169\152\12\246\0\169\0\10\72\0\144\145\11\122\1\36\0", 51 "\11\17\1\121\141\11\17\1\121\0\12\229\1\194\138\12\229\1\194\0\12\208\1\85\150\12\208\1\85\0\12\148\1\15\147\12\148\1\15\0", 52 "\13\145\0\208\147\13\145\0\208\0\6\238\7\45\135\7\10\7\238\0\6\220\7\150\135\6\206\7\242\0\6\174\7\175\135\6\135\8\7\0", 53 "\6\118\7\214\135\6\62\7\238\0\6\30\7\245\140\3\217\7\210\0\3\161\7\221\138\255\252\7\231\0\15\242\7\165\148\11\115\7\175\0", 54 "\11\196\6\164\138\11\10\8\4\0\11\210\7\31\141\11\210\7\31\0\14\216\2\72\166\14\216\2\72\0\14\213\4\4\166\14\213\4\4\0", 55 "\13\216\1\159\148\13\216\1\159\0\13\159\2\143\148\13\159\2\143\0\13\230\3\69\145\13\230\3\69\0\13\163\4\11\145\13\166\4\11\0", 56 "\13\237\4\208\145\13\237\4\208\0\14\195\5\61\145\14\195\5\61\0\13\78\1\254\136\13\78\1\254\0\12\239\2\93\136\12\239\2\93\0", 57 "\12\250\2\227\136\12\250\2\227\0\13\71\3\59\136\13\71\3\59\0\13\1\3\168\136\13\1\3\168\0\12\243\4\32\136\12\246\4\32\0", 58 "\13\40\4\130\136\13\43\4\134\0\13\92\4\243\136\13\92\4\243\0\13\142\5\135\136\13\142\5\135\0\14\33\5\106\136\14\33\5\106\0", 59 "\14\111\5\208\136\14\121\5\216\0\15\13\5\237\136\15\13\5\237\0\15\73\5\128\136\15\73\5\128\0\15\84\4\243\136\15\84\4\243\0", 60 "\14\199\6\33\133\14\199\6\33\0\14\97\6\44\133\14\83\6\44\0\14\9\5\240\133\14\9\5\240\0\13\226\5\163\133\13\226\5\163\0", 61 "\13\170\5\233\133\13\170\5\233\0\13\71\5\205\133\13\71\5\205\0\13\61\5\117\133\13\61\5\117\0\13\22\5\40\133\13\22\5\40\0", 62 "\12\253\4\211\133\12\253\4\211\0\12\197\4\169\133\12\197\4\169\0\12\204\4\106\133\12\204\4\106\0\12\162\4\46\133\12\162\4\42\0", 63 "\12\194\3\200\133\12\194\3\196\0\12\201\3\84\133\12\201\3\84\0\12\253\3\62\133\12\253\3\62\0\12\169\2\241\133\12\169\2\241\0", 64 "\12\187\2\167\133\12\187\2\167\0\12\158\2\93\133\12\158\2\93\0\12\162\2\9\133\12\162\2\9\0\12\123\1\205\132\12\123\1\205\0", 65 "\12\84\1\251\132\12\84\1\251\0\12\91\2\55\132\12\95\2\55\0\12\63\2\139\132\12\63\2\139\0\12\120\2\164\132\12\120\2\164\0", 66 "\12\81\2\206\132\12\81\2\206\0\12\106\3\17\132\12\109\3\20\0\12\137\3\73\132\12\137\3\73\0\12\84\3\122\132\12\84\3\122\0", 67 "\12\137\3\150\132\12\137\3\150\0\12\95\3\217\132\12\95\3\217\0\12\134\3\231\132\12\134\3\231\0\12\106\4\63\132\12\106\4\63\0", 68 "\12\137\4\120\132\12\141\4\120\0\12\88\4\179\132\12\88\4\183\0\12\134\4\190\132\12\134\4\190\0\12\158\4\232\132\12\165\4\232\0", 69 "\12\215\5\15\132\12\215\5\15\0\12\91\4\243\130\12\91\4\243\0\12\144\5\26\130\12\144\5\26\0\12\176\5\54\130\12\176\5\54\0", 70 "\12\225\5\82\130\12\225\5\82\0\13\4\5\117\130\13\1\5\117\0\12\239\5\166\130\12\239\5\166\0\13\8\5\184\130\13\11\5\184\0", 71 "\13\8\5\226\130\13\8\5\226\0\13\54\6\12\130\13\57\6\12\0\13\106\6\2\130\13\106\5\254\0\13\138\6\12\130\13\138\6\12\0", 72 "\13\184\6\30\130\13\187\6\30\0\13\223\5\254\130\13\223\5\254\0\13\149\6\69\130\13\145\6\69\0\13\128\6\33\130\13\128\6\33\0", 73 "\13\85\6\40\130\13\85\6\40\0\12\232\6\2\130\12\232\6\2\0\12\204\5\205\130\12\204\5\201\0\12\183\5\159\130\12\183\5\156\0", 74 "\12\211\5\128\130\12\211\5\128\0\12\165\5\103\130\12\165\5\103\0\12\123\5\64\130\12\120\5\64\0\12\81\5\71\130\12\81\5\71\0", 75 "\12\84\5\18\130\12\84\5\18\0\12\39\4\243\130\12\39\4\243\0\12\35\4\194\130\12\35\4\194\0\12\63\4\127\130\12\63\4\127\0", 76 "\12\91\4\106\130\12\91\4\106\0\12\53\4\60\130\12\53\4\60\0\12\74\4\25\130\12\84\4\21\0\12\120\4\4\130\12\120\4\4\0", 77 "\12\42\3\231\130\12\42\3\231\0\12\39\3\189\130\12\42\3\186\0\12\60\3\175\130\12\60\3\175\0\12\39\3\133\130\12\39\3\133\0", 78 "\12\70\3\73\130\12\70\3\73\0\12\25\3\77\130\12\25\3\77\0\12\42\3\13\130\12\46\3\13\0\12\81\3\31\130\12\81\3\31\0", 79 "\12\32\2\213\130\12\32\2\213\0\12\14\2\178\130\12\14\2\178\0\12\42\2\181\130\12\46\2\181\0\12\14\2\128\130\12\14\2\128\0", 80 "\12\39\2\100\130\12\42\2\100\0\12\74\2\104\130\12\77\2\104\0\12\106\2\135\130\12\109\2\135\0\12\39\2\72\130\12\39\2\69\0", 81 "\12\35\2\37\130\12\35\2\37\0\12\32\2\2\130\12\32\2\2\0\12\28\1\226\130\12\28\1\223\0\12\63\1\208\130\12\63\1\208\0", 82 "\12\84\1\173\130\12\84\1\170\0\12\63\1\159\130\12\60\1\159\0\12\39\1\113\130\12\39\1\113\0\12\14\1\96\130\12\11\1\96\0", 83 "\11\228\1\131\130\11\228\1\135\0\12\7\1\149\130\12\7\1\149\0\12\21\1\177\130\12\25\1\177\0\11\242\1\201\130\11\242\1\201\0", 84 "\13\226\6\58\130\13\226\6\58\0\14\16\6\40\130\14\16\6\40\0\13\208\6\86\130\13\208\6\86\0\13\247\6\111\130\13\247\6\114\0", 85 "\13\184\6\121\130\13\184\6\121\0\13\198\6\146\130\13\201\6\146\0\13\244\6\139\130\13\244\6\139\0\13\223\6\185\130\13\223\6\185\0", 86 "\13\173\6\199\130\13\173\6\199\0\13\159\6\171\130\13\159\6\171\0\13\138\6\220\130\13\138\6\220\0\13\184\6\238\130\13\184\6\238\0", 87 "\13\208\6\223\130\13\208\6\223\0\13\216\7\10\130\13\216\7\10\0\13\184\7\10\130\13\180\7\10\0\13\142\7\38\130\13\142\7\41\0", 88 "\13\128\7\6\130\13\128\7\6\0\13\85\7\34\130\13\89\7\34\0\13\89\7\3\130\13\89\7\3\0\13\117\6\220\130\13\121\6\220\0", 89 "\13\75\6\195\130\13\75\6\195\0\13\110\6\164\130\13\110\6\164\0\13\156\6\125\130\13\156\6\125\0\13\106\6\135\130\13\106\6\135\0", 90 "\13\103\6\100\130\13\103\6\100\0\13\64\6\143\130\13\64\6\143\0\13\47\6\104\130\13\47\6\104\0\13\71\6\79\130\13\71\6\79\0", 91 "\13\40\6\65\130\13\36\6\65\0\13\8\6\44\130\13\1\6\44\0\13\8\6\76\130\13\8\6\76\0\13\1\6\132\130\13\1\6\132\0", 92 "\13\33\6\135\130\13\33\6\135\0\13\26\6\178\130\13\22\6\178\0\13\47\6\202\130\13\50\6\202\0\13\54\6\245\130\13\54\6\245\0", 93 "\13\22\7\3\130\13\22\7\3\0\13\43\7\27\130\13\43\7\27\0\12\253\6\248\130\12\250\6\248\0\12\253\6\220\130\12\253\6\220\0", 94 "\12\215\6\174\130\12\225\6\174\0\12\253\6\174\130\12\253\6\174\0\12\215\6\121\130\12\215\6\121\0\12\229\6\76\130\12\229\6\76\0", 95 "\12\201\6\51\130\12\201\6\51\0\12\190\6\19\130\12\190\6\19\0\12\151\5\223\130\12\151\5\223\0\12\148\5\194\130\12\151\5\194\0", 96 "\12\155\5\159\130\12\155\5\156\0\12\144\5\121\130\12\144\5\121\0\12\95\5\110\130\12\95\5\110\0\12\102\5\156\130\12\102\5\159\0", 97 "\12\99\5\216\130\12\106\5\219\0\12\148\6\40\130\12\148\6\40\0\12\127\6\19\130\12\127\6\19\0\12\176\6\104\130\12\176\6\104\0", 98 "\12\141\6\72\130\12\141\6\72\0\12\162\6\139\130\12\162\6\143\0\12\172\6\181\130\12\172\6\181\0\12\204\6\216\130\12\208\6\216\0", 99 "\12\201\7\3\130\12\201\7\3\0\12\236\7\24\130\12\236\7\24\0\12\120\6\146\130\12\120\6\146\0\12\123\6\104\130\12\123\6\104\0", 100 "\12\123\6\185\130\12\123\6\185\0\12\162\6\227\130\12\162\6\227\0\12\134\6\241\130\12\134\6\241\0\12\155\7\10\130\12\155\7\10\0", 101 "\12\190\7\41\130\12\190\7\41\0\11\228\1\96\129\11\228\1\96\0\11\200\1\121\129\11\200\1\121\0\11\193\1\156\129\11\196\1\156\0", 102 "\11\221\1\170\129\11\221\1\170\0\11\217\1\208\129\11\217\1\208\0\11\245\1\230\129\11\245\1\230\0\11\245\2\16\129\11\245\2\16\0", 103 "\12\14\2\62\129\12\18\2\62\0\11\242\2\93\129\11\242\2\93\0\11\235\2\178\129\11\235\2\178\0\11\231\2\238\129\11\235\2\238\0", 104 "\12\4\2\252\129\12\4\2\252\0\11\252\3\34\129\11\252\3\34\0\11\235\3\87\129\11\238\3\87\0\12\11\3\119\129\12\11\3\119\0", 105 "\12\4\3\168\129\12\4\3\168\0\11\245\3\200\129\11\245\3\200\0\11\252\3\238\129\11\252\3\242\0\12\11\4\7\129\12\11\4\7\0", 106 "\11\245\4\60\129\11\238\4\60\0\11\224\4\74\129\11\221\4\74\0\11\210\4\137\129\11\210\4\137\0\11\228\4\151\129\11\231\4\151\0", 107 "\11\242\4\130\129\11\242\4\130\0\12\4\4\113\129\12\7\4\113\0\12\28\4\102\129\12\28\4\102\0\12\11\4\141\129\12\11\4\141\0", 108 "\11\249\4\162\129\11\249\4\162\0\11\221\4\116\129\11\221\4\116\0\11\214\4\106\129\11\217\4\102\0\12\4\4\211\129\12\4\4\211\0", 109 "\11\249\5\8\129\11\252\5\8\0\12\39\5\11\129\12\42\5\11\0\12\56\5\50\129\12\60\5\47\0\12\46\5\96\129\12\49\5\96\0", 110 "\12\70\5\113\129\12\70\5\113\0\12\56\5\166\129\12\63\5\166\0\12\70\5\145\129\12\74\5\145\0\12\70\5\194\129\12\77\5\194\0", 111 "\12\70\5\237\129\12\74\5\237\0\12\106\5\240\129\12\109\5\240\0\12\99\6\33\129\12\99\6\33\0\12\88\6\72\129\12\88\6\72\0", 112 "\12\91\6\107\129\12\95\6\107\0\12\77\6\146\129\12\81\6\146\0\12\88\6\181\129\12\91\6\181\0\12\91\6\220\129\12\99\6\220\0", 113 "\12\113\7\10\129\12\116\7\10\0\8\116\4\18\179\8\116\4\18\0\9\205\3\73\156\9\205\3\73\0\10\83\2\146\144\10\83\2\146\0", 114 "\10\153\2\44\136\10\153\2\44\0\10\181\1\240\132\10\181\1\240\0\10\199\1\205\131\10\199\1\205\0\10\209\1\184\129\10\209\1\184\0", 115 "\8\42\2\167\150\8\42\2\167\0\8\53\1\240\141\8\53\1\237\0\8\67\1\135\134\8\67\1\135\0\11\224\5\8\129\11\224\5\8\0", 116 "\11\200\5\8\129\11\200\5\8\0\11\182\5\8\129\11\182\5\8\0\11\154\5\4\129\11\154\5\4\0\11\129\5\8\129\11\129\5\8\0", 117 "\11\119\3\84\129\11\119\3\84\0\11\140\3\87\129\11\140\3\87\0\11\165\3\87\129\11\165\3\87\0\11\182\3\87\129\11\182\3\87\0", 118 "\11\203\3\87\129\11\203\3\87\0\9\33\6\223\132\9\33\8\11\0\9\33\6\188\129\9\33\6\188\0\0\123\1\26\136\0\211\2\223\0", 119 "\0\211\2\223\136\0\120\3\84\0\0\130\3\101\136\0\211\4\53\0\0\204\4\53\136\0\120\4\151\0\0\130\3\193\136\0\127\4\63\0", 120 "\0\130\3\31\136\0\130\1\201\0\0\91\4\253\130\0\91\6\76\0\7\94\3\136\138\7\94\3\136\0\7\24\3\77\135\7\24\3\77\0", 121 "\6\238\3\24\132\6\241\3\24\0\6\223\2\238\131\6\223\2\238\0\6\220\2\209\129\6\220\2\209\0\7\87\4\14\133\7\87\4\14\0", 122 "\7\38\4\0\131\7\38\4\0\0\7\6\3\242\130\7\6\3\242\0\6\241\3\228\129\6\241\3\228\0\6\227\3\217\128\6\227\3\217\0", 123 "\0\109\4\197\135\0\162\5\99\0\0\144\5\121\135\0\123\6\9\0\0\127\5\92\135\0\127\5\92\0\0\127\5\54\135\0\127\5\54\0", 124 "\0\134\6\23\132\0\236\6\97\0\0\236\6\97\132\1\106\6\135\0\1\117\6\135\132\1\177\6\143\0\2\234\7\80\130\3\69\7\80\0", 125 "\3\69\7\80\130\3\84\7\101\0\3\84\7\101\130\3\87\7\129\0\3\87\7\129\130\3\84\7\150\0\0\183\5\103\130\1\92\5\159\0", 126 "\1\11\5\138\130\0\253\5\180\0\0\253\5\180\130\0\158\5\166\0\0\239\4\60\131\1\166\4\95\0\2\104\3\133\131\3\84\3\129\0", 127 "\4\162\2\181\131\4\162\3\147\0\3\115\2\26\131\4\74\2\30\0\2\23\1\54\131\2\230\1\54\0\0\204\2\5\131\1\194\2\5\0", 128 "\4\74\2\33\131\5\226\1\223\0\0\225\5\121\197\1\135\5\163\0\0\204\5\173\197\1\1\5\173\0\0\179\5\152\131\1\57\5\163\0", 129 "\1\57\5\159\131\1\106\5\219\0\0\165\5\226\130\0\253\5\230\0\0\253\5\230\130\1\8\5\159\0\1\254\6\86\131\1\254\6\86\0", 130 "\1\254\6\33\131\1\254\6\33\0\1\254\5\230\131\1\254\5\230\0\1\254\5\170\131\1\254\5\170\0\1\254\5\113\131\1\254\5\113\0", 131 "\1\251\6\5\129\1\251\6\5\0\1\254\5\201\129\1\254\5\201\0\1\254\5\138\129\1\254\5\138\0\1\254\6\58\129\1\254\6\58\0", 132 "\1\254\5\78\129\1\254\5\78\0\2\2\5\40\131\2\2\5\40\0\2\2\4\246\131\2\2\4\246\0\1\237\4\204\131\1\237\4\204\0", 133 "\2\40\4\190\131\2\40\4\190\0\6\160\7\52\223\7\27\7\126\0\1\219\4\172\204\1\219\4\172\0\2\37\4\183\197\2\37\4\183\0", 134 "\3\98\3\122\131\3\126\3\84\0\3\126\3\84\131\3\126\3\52\0\3\126\3\41\131\3\80\3\24\0\3\80\3\24\131\3\112\2\248\0", 135 "\3\112\2\248\131\3\98\2\188\0", 136} 137 138 139-----------------------------Constants--------------------------------- 140choiceAccepted = 1 141choiceRefused = 2 142choiceAttacked = 3 143 144choiceEliminate = 1 145choiceSpare = 2 146 147leaksNum = 1 148denseNum = 2 149waterNum = 3 150buffaloNum = 4 151chiefNum = 5 152girlNum = 6 153wiseNum = 7 154 155nativeNames = {loc("Leaks A Lot"), loc("Dense Cloud"), loc("Fiery Water"), 156 loc("Raging Buffalo"), loc("Righteous Beard"), loc("Fell From Grace"), 157 loc("Wise Oak")} 158 159nativeUnNames = {loc("Zork"), loc("Steve"), loc("Jack"), 160 loc("Lee"), loc("Elmo"), loc("Rachel"), 161 loc("Muriel")} 162 163nativeHats = {"Rambo", "RobinHood", "pirate_jack", "zoo_Bunny", "IndianChief", 164 "tiara", "AkuAku"} 165 166nativePos = {257, 1950} 167 168cyborgNames = {loc("Syntax Errol"), loc("Segmentation Paul"), loc("Unexpected Igor"), loc("Jeremiah")} 169cyborgPos = {745, 1847} 170cyborgsPos = {{2937, 831}, {2945, 1264}, {2335, 1701}, {448, 484}} 171cyborgsDir = {"Left", "Left", "Left", "Right"} 172 173cyborgTeamName, fighterTeamName, nativesTeamName = nil, nil, nil 174 175cratePos = { 176 {{788, 1919, amGirder, 2}, true}, {{412, 1615, amGirder, 1}, true}, 177 {{209, 1474, amSniperRifle, 1}}, {{1178, 637, amDEagle, 1}}, 178 {{633, 268, amDEagle, 1}}, {{3016, 1545, amDEagle, 1}}, 179 {{249, 1377, amRope, 3}, true}, {{330, 1018, amGirder, 1}, true}, 180 {{888, 647, amRope, 3}, true}, {{2116, 337, amRope, 3}, true}, 181 {{1779, 948, amRope, 3}, true}, {{3090, 1066, amRope, 3}, true}, 182 {{947, 480, amBazooka, 3}}, {{1097, 480, amMortar, 3}}, 183 {{1139, 451, amSnowball, 3}}, {{1207, 468, amShotgun, 3}}, 184 {{1024, 393, amSniperRifle, 2}}, {{998, 391, amDynamite, 2}}, 185 {{1024, 343, amRope, 2}, true}, {{998, 341, amRope, 2}, true}, 186 } 187reactions = {loc("Yeah, take that!"), loc("Bullseye"), loc("Die, die, die!")} 188 189secondPos = {{1010, 510}, {1067, 510}} 190-----------------------------Variables--------------------------------- 191natives = {} 192native = nil 193 194cyborgs = {} 195cyborg = {} 196cyborgsLeft = 0 197 198gearDead = {} 199hedgeHidden = {} 200 201startAnim = {} 202killAnim = {} 203killedAnim = {} 204 205freshDead = nil 206crates = {} 207cratesNum = 0 208jetCrate = nil 209 210firstTurn = true 211cyborgsKilledBeforeCrates = false 212cratesTaken = false 213doneCyborgsDead = false 214 215timeAfterCratesTaken = nil 216 217annoyingGearsForPortalScene = {} 218-----------------------------Animations-------------------------------- 219function EmitDenseClouds(dir) 220 local dif 221 if dir == "Left" then 222 dif = 10 223 else 224 dif = -10 225 end 226 AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) 227 AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) 228 AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) 229 AnimInsertStepNext({func = AnimWait, args = {native, 800}}) 230 AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) 231 AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) 232 AnimInsertStepNext({func = AnimWait, args = {native, 800}}) 233 AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) 234end 235 236function AnimationSetup() 237 startAnim = {} 238 local m = m5DeployedNum 239 table.insert(startAnim, {func = AnimWait, args = {native, 3000}}) 240 table.insert(startAnim, {func = AnimCaption, args = {native, string.format(loc("With the rest of the tribe gone, it was up to %s to save the village."), nativeNames[m5DeployedNum]), 5000}}) 241 table.insert(startAnim, {func = AnimCaption, args = {native, loc("But it proved to be no easy task!"), 2000}}) 242 for i = 1, 4 do 243 table.insert(startAnim, {func = FollowGear, swh = false, args = {cyborgs[i]}}) 244 table.insert(startAnim, {func = AnimWait, args = {native, 1000}}) 245 end 246 table.insert(startAnim, {func = FollowGear, swh = false, args = {native}}) 247 if m == leaksNum then 248 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) 249 table.insert(startAnim, {func = AnimSay, args = {native, loc("What a strange cave!"), SAY_THINK, 0}}) 250 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) 251 table.insert(startAnim, {func = AnimSay, args = {native, loc("Now how do I get on the other side?!"), SAY_THINK, 5500}}) 252 elseif m == denseNum then 253 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) 254 table.insert(startAnim, {func = AnimSay, args = {native, loc("Dude, what's this place?!"), SAY_THINK, 0}}) 255 table.insert(startAnim, {func = AnimCustomFunction, args = {native, EmitDenseClouds, {"Right"}}}) 256 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) 257 table.insert(startAnim, {func = AnimSay, args = {native, loc("And where's all the weed?"), SAY_THINK, 4000}}) 258 elseif m == waterNum then 259 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) 260 table.insert(startAnim, {func = AnimSay, args = {native, loc("Is this place in my head?"), SAY_THINK, 0}}) 261 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) 262 table.insert(startAnim, {func = AnimSay, args = {native, loc("I shouldn't have drunk that last pint."), SAY_THINK, 6000}}) 263 elseif m == buffaloNum then 264 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) 265 table.insert(startAnim, {func = AnimSay, args = {native, loc("Where did that alien run?"), SAY_THINK, 0}}) 266 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) 267 table.insert(startAnim, {func = AnimSay, args = {native, loc("When I find it..."), SAY_THINK, 3000}}) 268 elseif m == girlNum then 269 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) 270 table.insert(startAnim, {func = AnimSay, args = {native, loc("This is typical!"), SAY_THINK, 0}}) 271 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) 272 table.insert(startAnim, {func = AnimSay, args = {native, loc("It's always up to women to clear up the mess men created!"), SAY_THINK, 8500}}) 273 elseif m == chiefNum then 274 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) 275 table.insert(startAnim, {func = AnimSay, args = {native, loc("What is this place?"), SAY_THINK, 0}}) 276 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) 277 table.insert(startAnim, {func = AnimSay, args = {native, loc("It doesn't matter. I won't let that alien hurt my daughter!"), SAY_THINK, 8500}}) 278 elseif m == wiseNum then 279 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) 280 table.insert(startAnim, {func = AnimSay, args = {native, loc("Every single time!"), SAY_THINK, 0}}) 281 table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) 282 table.insert(startAnim, {func = AnimSay, args = {native, loc("How come in a village full of warriors, it's up to me to save it?"), SAY_THINK, 8500}}) 283 end 284 285 table.insert(startAnim, {func = AnimCustomFunction, args = {native, RestoreHedge, {cyborg, unpack(cyborgPos)}}}) 286 table.insert(startAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(cyborgPos)}}) 287 table.insert(startAnim, {func = AnimTurn, args = {cyborg, "Left"}}) 288 table.insert(startAnim, {func = AnimSay, args = {cyborg, string.format(loc("Greetings, %s!"), nativeUnNames[m]), SAY_SAY, 2500}}) 289 table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("As you can see, there is no way to get on the other side!"), SAY_SAY, 7000}}) 290 table.insert(startAnim, {func = AnimSay, args = {cyborg, string.format(loc("I wish to help you, %s!"), nativeUnNames[m]), SAY_SAY, 4000}}) 291 table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("Beware, though! If you are slow, you die!"), SAY_SAY, 7000}}) 292 table.insert(startAnim, {func = AnimDisappear, args = {cyborg, unpack(cyborgPos)}}) 293 table.insert(startAnim, {func = AnimSwitchHog, args = {native}}) 294 table.insert(startAnim, {func = AnimCustomFunction, args = {native, HideHedge, {cyborg}}}) 295 table.insert(startAnim, {func = AnimSay, args = {native, loc("Talk about mixed signals..."), SAY_SAY, 4000}}) 296 AddSkipFunction(startAnim, SkipStartAnim, {}) 297end 298 299function SetupKillAnim() 300 table.insert(killAnim, {func = AnimSay, args = {native, loc("Well, that was a waste of time."), SAY_THINK, 5000}}) 301 table.insert(killAnim, {func = AnimCustomFunction, args = {native, RestoreHedge, {cyborg, unpack(cyborgPos)}}}) 302 table.insert(killAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(cyborgPos)}}) 303 table.insert(killAnim, {func = AnimCustomFunction, args = {cyborg, CondNeedToTurn, {cyborg, native}}}) 304 table.insert(killAnim, {func = AnimSay, args = {cyborg, string.format(loc("You bear impressive skills, %s!"), nativeUnNames[m5DeployedNum]), SAY_SHOUT, 4000}}) 305 if CheckCyborgsDead() then 306 table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("I see you already took care of your enemies."), SAY_SHOUT, 7000}}) 307 table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("Those were scheduled for disposal anyway."), SAY_SHOUT, 4000}}) 308 table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("So you basically did the dirty work for us."), SAY_SHOUT, 4000}}) 309 cyborgsKilledBeforeCrates = true 310 else 311 table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("However, my mates don't agree with me on letting you go..."), SAY_SHOUT, 7000}}) 312 table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("I guess you'll have to kill them."), SAY_SHOUT, 4000}}) 313 end 314 table.insert(killAnim, {func = AnimDisappear, args = {cyborg, unpack(cyborgPos)}}) 315 table.insert(killAnim, {func = AnimSwitchHog, args = {native}}) 316 table.insert(killAnim, {func = AnimWait, args = {native, 1}}) 317 table.insert(killAnim, {func = AnimCustomFunction, args = {native, HideHedge, {cyborg}}}) 318 319 local function checkCyborgsAgain() 320 if CheckCyborgsDead() then 321 DoCyborgsDead() 322 end 323 end 324 table.insert(killAnim, {func = AnimCustomFunction, args = {native, checkCyborgsAgain, {}}}) 325 326 AddSkipFunction(killAnim, SkipKillAnim, {}) 327end 328 329function SetupKilledAnim() 330 table.insert(killedAnim, {func = AnimWait, args = {cyborg, 500}}) 331 table.insert(killedAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(secondPos[2])}}) 332 table.insert(killedAnim, {func = AnimOutOfNowhere, args = {native, unpack(secondPos[1])}}) 333 table.insert(killedAnim, {func = AnimCustomFunction, args = {cyborg, CondNeedToTurn, {cyborg, native}}}) 334 if not cyborgsKilledBeforeCrates then 335 table.insert(killedAnim, {func = AnimSay, args = {cyborg, string.format(loc("Nice work, %s!"), nativeUnNames[m5DeployedNum]), SAY_SHOUT, 4000}}) 336 end 337 table.insert(killedAnim, {func = AnimSay, args = {cyborg, loc("As a reward for your performance, here's some new technology!"), SAY_SHOUT, 8000}}) 338 table.insert(killedAnim, {func = AnimSay, args = {cyborg, loc("Use it wisely!"), SAY_SHOUT, 3000}}) 339 table.insert(killedAnim, {func = AnimDisappear, args = {cyborg, unpack(secondPos[2])}}) 340 table.insert(killedAnim, {func = AnimSwitchHog, args = {native}}) 341 AddSkipFunction(killedAnim, SkipKilledAnim, {}) 342end 343--------------------------Anim skip functions-------------------------- 344function SkipStartAnim() 345 AnimSetGearPosition(native, 457, 1955) 346 AnimSwitchHog(native) 347 AnimWait(native, 1) 348 AddFunction({func = HideHedge, args = {cyborg}}) 349end 350 351function SpawnCrateByID(id) 352 if cratePos[id][2] == true then 353 crates[id] = SpawnSupplyCrate(unpack(cratePos[id][1])) 354 else 355 crates[id] = SpawnSupplyCrate(unpack(cratePos[id][1])) 356 end 357 return crates[id] 358end 359 360function AfterStartAnim() 361 SetGearMessage(native, 0) 362 cratesNum = 0 363 for i = 1, 6 do 364 SpawnCrateByID(i) 365 cratesNum = cratesNum + 1 366 end 367 FollowGear(native) 368 AddNewEvent(CheckGearsDead, {{crates[1], crates[2]}}, PutCrates, {2}, 0) 369 SetTurnTimeLeft(TurnTime) 370 ShowMission(loc("Dragon's Lair"), loc("Obstacle course"), loc("In order to get to the other side, you need to get rid of the crates first.") .. "|" .. 371 loc("As the ammo is sparse, you might want to reuse ropes while mid-air.") .. "|" .. 372 loc("The enemy can't move but it might be a good idea to stay out of sight!") .. "|" .. 373 loc("Mines time: 5 seconds"), 1, 0) 374end 375 376function SkipKillAnim() 377 AnimSwitchHog(native) 378 AnimWait(native, 1) 379 AddFunction({func = HideHedge, args = {cyborg}}) 380 if CheckCyborgsDead() then 381 DoCyborgsDead() 382 end 383end 384 385function AfterKillAnim() 386 if not cyborgsKilledBeforeCrates then 387 PutWeaponCrates() 388 if timeAfterCratesTaken then 389 SetTurnTimeLeft(timeAfterCratesTaken) 390 else 391 SetTurnTimeLeft(TurnTime) 392 end 393 SetReadyTimeLeft(Ready) 394 AddEvent(CheckCyborgsDead, {}, DoCyborgsDead, {}, 0) 395 ShowMission(loc("Dragon's Lair"), loc("The Slaughter"), loc("Kill the aliens!").."|"..loc("Mines time: 5 seconds"), 1, 2000) 396 end 397end 398 399function SkipKilledAnim() 400 AnimSetGearPosition(native, unpack(secondPos[1])) 401 AnimSwitchHog(native) 402 AnimWait(native, 1) 403end 404 405function AfterKilledAnim() 406 -- Final mission segment with the portal gun 407 HideHedge(cyborg) 408 EndTurn(true) 409 SetGearMessage(native, 0) 410 SpawnSupplyCrate(1184, 399, amPortalGun, 100) 411 SpawnSupplyCrate(2259, 755, amTeleport, 2) 412 SpawnHealthCrate(secondPos[1][1] + 50, secondPos[1][2] - 20) 413 ShowMission(loc("Dragon's Lair"), loc("The what?!"), loc("Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|").. 414 loc("Portal hint: One goes to the destination, the other one is the entrance.|").. 415 loc("Teleport hint: Just use the mouse to select the destination!").."|".. 416 loc("Mines time: 5 seconds"), 1, 8000) 417end 418-----------------------------Events------------------------------------ 419 420function CheckCyborgsDead() 421 return cyborgsLeft == 0 422end 423 424function NullifyAmmo() 425 -- Clear the ammo and delete all inappropirate gears on the long platform for the portal scene 426 AddAmmo(native, amRope, 0) 427 AddAmmo(native, amGirder, 0) 428 AddAmmo(native, amLowGravity, 0) 429 AddAmmo(native, amBazooka, 0) 430 AddAmmo(native, amSniperRifle, 0) 431 AddAmmo(native, amDEagle, 0) 432 AddAmmo(native, amDynamite, 0) 433 AddAmmo(native, amFirePunch, 0) 434 AddAmmo(native, amBaseballBat, 0) 435 AddAmmo(native, amMortar, 0) 436 AddAmmo(native, amSnowball, 0) 437 AddAmmo(native, amShotgun, 0) 438 439 for i=1, #annoyingGearsForPortalScene do 440 local gear = annoyingGearsForPortalScene[i] 441 if not gearDead[gear] and GetY(gear) > 100 and GetY(gear) < 571 and GetX(gear) > 840 and GetX(gear) < 1550 then 442 DeleteGear(annoyingGearsForPortalScene[i]) 443 end 444 end 445end 446 447function DoCyborgsDead() 448 if cratesTaken and not doneCyborgsDead then 449 NullifyAmmo() 450 RestoreHedge(cyborg) 451 SetupKilledAnim() 452 SetGearMessage(CurrentHedgehog, 0) 453 AddAnim(killedAnim) 454 AddFunction({func = AfterKilledAnim, args = {}}) 455 doneCyborgsDead = true 456 end 457end 458 459 460function PutWeaponCrates() 461 for i = 1, 8 do 462 cratesNum = cratesNum + 1 463 SpawnCrateByID(cratesNum) 464 end 465 FollowGear(native) 466end 467 468function DoCratesTaken() 469 cratesTaken = true 470 timeAfterCratesTaken = TurnTimeLeft 471 SetupKillAnim() 472 SetGearMessage(CurrentHedgehog, 0) 473 AddAnim(killAnim) 474 AddFunction({func = AfterKillAnim, args = {}}) 475end 476 477function CheckPutCrates(gear) 478 if gear and GetHealth(gear) then 479 return StoppedGear(gear) 480 else 481 return false 482 end 483end 484 485function PutCrates(index) 486 if index <= 7 then 487 cratesNum = cratesNum + 1 488 SpawnCrateByID(cratesNum) 489 AddNewEvent(CheckGearDead, {crates[cratesNum]}, PutCrates, {index + 1}, 0) 490 FollowGear(native) 491 else 492 AddEvent(CheckPutCrates, {native}, DoCratesTaken, {}, 0) 493 end 494 if index == 4 then 495 AnimSay(native, loc("I'm a ninja."), SAY_THINK, 0) 496 end 497end 498 499function CheckMissionFinished() 500 return gearDead[jetCrate] == true 501end 502 503function DoMissionFinished() 504 AddCaption(loc("Salvation was one step closer now...")) 505 if progress and progress<6 then 506 SaveCampaignVar("Progress", "6") 507 end 508 RestoreHedge(cyborg) 509 DeleteGear(cyborg) 510 DismissTeam(fighterTeamName) -- just in case 511 EndTurn(true) 512end 513 514function CheckGearsDead(gearList) 515 for i = 1, # gearList do 516 if gearDead[gearList[i]] ~= true then 517 return false 518 end 519 end 520 return true 521end 522 523 524function CheckGearDead(gear) 525 return gearDead[gear] 526end 527 528function EndMission() 529 RestoreHedge(cyborg) 530 DeleteGear(cyborg) 531 EndTurn(true) 532end 533 534function CheckFreshDead() 535 return freshDead ~= nil 536end 537 538function CyborgDeadReact() 539 freshDead = nil 540 if cyborgsLeft == 0 then 541 if (not cratesTaken) and (not CheckMissionFinished()) then 542 AnimSay(native, loc("I still have to get rid of the crates."), SAY_THINK, 8000) 543 end 544 return 545 end 546 AnimSay(native, reactions[cyborgsLeft]) 547end 548-----------------------------Misc-------------------------------------- 549function HideHedge(hedge) 550 if hedgeHidden[hedge] ~= true then 551 HideHog(hedge) 552 hedgeHidden[hedge] = true 553 end 554end 555 556function RestoreHedge(hedge) 557 if hedgeHidden[hedge] == true then 558 RestoreHog(hedge) 559 hedgeHidden[hedge] = false 560 end 561end 562 563function GetVariables() 564 progress = tonumber(GetCampaignVar("Progress")) 565 m5DeployedNum = tonumber(GetCampaignVar("M5DeployedNum")) or leaksNum 566end 567 568function SetupPlace() 569 for i = 1, 7 do 570 if i ~= m5DeployedNum then 571 DeleteGear(natives[i]) 572 else 573 native = natives[i] 574 end 575 end 576 HideHedge(cyborg) 577 -- Collect this crate to win 578 jetCrate = SpawnSupplyCrate(3915, 1723, amJetpack) 579 -- Protect crate from damage, just in case 580 SetState(jetCrate, bor(GetState(jetCrate), gstNoDamage)) 581 582 --[[ Block the left entrance. 583 Otherwise the player could rope out of the map and 584 go all the way around to the final crate. ]] 585 PlaceGirder(90, 1709, 6) 586 PlaceGirder(90, 1875, 6) 587 588 -- Place mines on the ground floor 589 AddGear(1071, 1913, gtMine, 0, 0, 0, 0) 590 AddGear(1098, 1919, gtMine, 0, 0, 0, 0) 591 AddGear(1136, 1923, gtMine, 0, 0, 0, 0) 592 AddGear(1170, 1930, gtMine, 0, 0, 0, 0) 593 AddGear(1203, 1924, gtMine, 0, 0, 0, 0) 594 AddGear(1228, 1939, gtMine, 0, 0, 0, 0) 595 AddGear(1264, 1931, gtMine, 0, 0, 0, 0) 596 AddGear(1309, 1938, gtMine, 0, 0, 0, 0) 597 AddGear(1352, 1936, gtMine, 0, 0, 0, 0) 598 AddGear(1386, 1939, gtMine, 0, 0, 0, 0) 599 AddGear(1432, 1942, gtMine, 0, 0, 0, 0) 600 AddGear(1483, 1950, gtMine, 0, 0, 0, 0) 601 AddGear(1530, 1954, gtMine, 0, 0, 0, 0) 602 AddGear(1579, 1959, gtMine, 0, 0, 0, 0) 603 AddGear(1000, 1903, gtMine, 0, 0, 0, 0) 604 AddGear(957, 1903, gtMine, 0, 0, 0, 0) 605 AddGear(909, 1910, gtMine, 0, 0, 0, 0) 606 AddGear(889, 1917, gtMine, 0, 0, 0, 0) 607 608 -- Place misc. mines 609 AddGear(759, 878, gtMine, 0, 0, 0, 0) 610 AddGear(2388, 759, gtMine, 0, 0, 0, 0) 611 AddGear(2498, 696, gtMine, 0, 0, 0, 0) 612 AddGear(2936, 1705, gtMine, 0, 0, 0, 0) 613 AddGear(3119, 1366, gtMine, 0, 0, 0, 0) 614 AddGear(2001, 832, gtMine, 0, 0, 0, 0) 615 AddGear(2008, 586, gtMine, 0, 0, 0, 0) 616 AddGear(511, 1245, gtMine, 0, 0, 0, 0) 617 618 -- And one barrel for fun 619 AddGear(719, 276, gtExplosives, 0, 0, 0, 0) 620 621 ------ STICKY MINE LIST ------ 622 AddGear(1199, 733, gtSMine, 0, 0, 0, 0) 623 AddGear(1195, 793, gtSMine, 0, 0, 0, 0) 624 AddGear(1201, 861, gtSMine, 0, 0, 0, 0) 625 AddGear(682, 878, gtSMine, 0, 0, 0, 0) 626 AddGear(789, 876, gtSMine, 0, 0, 0, 0) 627end 628 629function SetupEvents() 630 AddNewEvent(CheckMissionFinished, {}, DoMissionFinished, {}, 0) 631 AddNewEvent(CheckGearDead, {native}, EndMission, {}, 0) 632 AddNewEvent(CheckFreshDead, {}, CyborgDeadReact, {}, 1) 633end 634 635function SetupAmmo() 636 AddAmmo(cyborgs[1], amBazooka, 100) 637 AddAmmo(cyborgs[1], amShotgun, 100) 638 AddAmmo(cyborgs[1], amSwitch, 100) 639end 640 641function AddHogs() 642 nativesTeamName = AddMissionTeam(-2) 643 for i = 1, 7 do 644 natives[i] = AddHog(nativeNames[i], 0, 200, nativeHats[i]) 645 gearDead[natives[i]] = false 646 end 647 648 cyborgTeamName = AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot_qau", "cm_binary") 649 cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1") 650 gearDead[cyborg] = false 651 652 fighterTeamName = AddTeam(loc("011101000"), -9, "ring", "UFO", "Robot_qau", "cm_binary") 653 for i = 1, 4 do 654 cyborgs[i] = AddHog(cyborgNames[i], 2, 100, "cyborg2") 655 gearDead[cyborgs[i]] = false 656 SetEffect(cyborgs[i], heArtillery, 1) 657 end 658 cyborgsLeft = 4 659 660 for i = 1, 7 do 661 AnimSetGearPosition(natives[i], unpack(nativePos)) 662 end 663 664 AnimSetGearPosition(cyborg, unpack(cyborgPos)) 665 666 for i = 1, 4 do 667 AnimSetGearPosition(cyborgs[i], unpack(cyborgsPos[i])) 668 AnimTurn(cyborgs[i], cyborgsDir[i]) 669 end 670 671end 672 673function CondNeedToTurn(hog1, hog2) 674 xl, xd = GetX(hog1), GetX(hog2) 675 if xl > xd then 676 AnimInsertStepNext({func = AnimTurn, args = {hog1, "Left"}}) 677 AnimInsertStepNext({func = AnimTurn, args = {hog2, "Right"}}) 678 elseif xl < xd then 679 AnimInsertStepNext({func = AnimTurn, args = {hog2, "Left"}}) 680 AnimInsertStepNext({func = AnimTurn, args = {hog1, "Right"}}) 681 end 682end 683 684-----------------------------Main Functions---------------------------- 685 686function onGameInit() 687 Seed = 0 688 GameFlags = gfSolidLand + gfDisableLandObjects + gfDisableWind + gfDisableGirders 689 TurnTime = 60000 690 CaseFreq = 0 691 MinesNum = 0 692 MinesTime = 5000 693 Explosives = 0 694 MapGen = mgDrawn 695 Theme = "City" 696 WaterRise = 0 697 HealthDecrease = 0 698 699 for i = 1, #map do 700 ParseCommand('draw ' .. map[i]) 701 end 702 703 AddHogs() 704 AnimInit(true) 705end 706 707function onGameStart() 708 GetVariables() 709 SetupAmmo() 710 SetupPlace() 711 AnimationSetup() 712 SetupEvents() 713 ShowMission(loc("Dragon's Lair"), loc("Y Chwiliad"), loc("Find your tribe!|Cross the lake!"), 10, 0) 714end 715 716function onGameTick() 717 AnimUnWait() 718 if ShowAnimation() == false then 719 return 720 end 721 ExecuteAfterAnimations() 722 CheckEvents() 723end 724 725function onGearDelete(gear) 726 gearDead[gear] = true 727 if GetGearType(gear) == gtHedgehog then 728 if GetHogTeamName(gear) == fighterTeamName then 729 freshDead = GetHogName(gear) 730 cyborgsLeft = cyborgsLeft - 1 731 end 732 end 733end 734 735function onGearAdd(gear) 736 -- Track gears for removal when reaching the portal segment 737 local gt = GetGearType(gear) 738 if gt == gtMine or gt == gtSMine or gt == gtCase or gt == gtExplosives then 739 table.insert(annoyingGearsForPortalScene, gear) 740 end 741end 742 743function onAmmoStoreInit() 744 SetAmmo(amFirePunch, 3, 0, 0, 0) 745 SetAmmo(amBaseballBat, 2, 0, 0, 0) 746 SetAmmo(amGirder, 0, 0, 0, 2) 747 SetAmmo(amLowGravity, 0, 0, 0, 1) 748 SetAmmo(amJetpack, 0, 0, 0, 1) 749 SetAmmo(amSkip, 9, 0, 0, 0) 750end 751 752function onNewTurn() 753 if firstTurn then 754 AddAnim(startAnim) 755 AddFunction({func = AfterStartAnim, args = {}}) 756 firstTurn = false 757 end 758 if GetHogTeamName(CurrentHedgehog) == fighterTeamName then 759 if TotalRounds % 6 == 0 then 760 AddAmmo(CurrentHedgehog, amSniperRifle, 1) 761 AddAmmo(CurrentHedgehog, amDEagle, 1) 762 end 763 SetTurnTimeLeft(30000) 764 elseif GetHogTeamName(CurrentHedgehog) == cyborgTeamName then 765 EndTurn(true) 766 end 767end 768 769function onPrecise() 770 if GameTime > 2500 and AnimInProgress() then 771 SetAnimSkip(true) 772 end 773end 774 775function onGameResult(winner) 776 if winner == GetTeamClan(nativesTeamName) then 777 SendStat(siGameResult, loc("Mission succeeded!")) 778 else 779 SendStat(siGameResult, loc("Mission failed!")) 780 end 781end 782 783