HedgewarsScriptLoad("/Scripts/Locale.lua") HedgewarsScriptLoad("/Scripts/Animate.lua") -----------------------------Map-------------------------------------- local map = { "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\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", "\3\112\2\248\131\3\98\2\188\0", } -----------------------------Constants--------------------------------- choiceAccepted = 1 choiceRefused = 2 choiceAttacked = 3 choiceEliminate = 1 choiceSpare = 2 leaksNum = 1 denseNum = 2 waterNum = 3 buffaloNum = 4 chiefNum = 5 girlNum = 6 wiseNum = 7 nativeNames = {loc("Leaks A Lot"), loc("Dense Cloud"), loc("Fiery Water"), loc("Raging Buffalo"), loc("Righteous Beard"), loc("Fell From Grace"), loc("Wise Oak")} nativeUnNames = {loc("Zork"), loc("Steve"), loc("Jack"), loc("Lee"), loc("Elmo"), loc("Rachel"), loc("Muriel")} nativeHats = {"Rambo", "RobinHood", "pirate_jack", "zoo_Bunny", "IndianChief", "tiara", "AkuAku"} nativePos = {257, 1950} cyborgNames = {loc("Syntax Errol"), loc("Segmentation Paul"), loc("Unexpected Igor"), loc("Jeremiah")} cyborgPos = {745, 1847} cyborgsPos = {{2937, 831}, {2945, 1264}, {2335, 1701}, {448, 484}} cyborgsDir = {"Left", "Left", "Left", "Right"} cratePos = { {788, 1919, amGirder, 2}, {412, 1615, amGirder, 1}, {209, 1474, amSniperRifle, 1}, {1178, 637, amDEagle, 1}, {633, 268, amDEagle, 1}, {3016, 1545, amDEagle, 1}, {249, 1377, amRope, 3}, {330, 1018, amGirder, 1}, {888, 647, amRope, 3}, {2116, 337, amRope, 3}, {1779, 948, amRope, 3}, {3090, 1066, amRope, 3}, {947, 480, amBazooka, 3}, {1097, 480, amMortar, 3}, {1139, 451, amSnowball, 3}, {1207, 468, amShotgun, 3}, {1024, 393, amSniperRifle, 2}, {998, 391, amDynamite, 2}, {1024, 343, amRope, 2}, {998, 341, amRope, 2} } reactions = {loc("Yeah, take that!"), loc("Bullseye"), loc("Die, die, die!")} secondPos = {{1010, 510}, {1067, 510}} -----------------------------Variables--------------------------------- natives = {} native = nil cyborgs = {} cyborg = {} cyborgsLeft = 0 gearDead = {} hedgeHidden = {} startAnim = {} killAnim = {} killedAnim = {} freshDead = nil crates = {} cratesNum = 0 jetCrate = nil -----------------------------Animations-------------------------------- function EmitDenseClouds(dir) local dif if dir == "Left" then dif = 10 else dif = -10 end AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimWait, args = {native, 800}}) AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) AnimInsertStepNext({func = AnimWait, args = {native, 800}}) AnimInsertStepNext({func = AnimVisualGear, args = {native, GetX(native) + dif, GetY(native) + dif, vgtSteam, 0, true}, swh = false}) end function AnimationSetup() startAnim = {} local m = m5DeployedNum table.insert(startAnim, {func = AnimWait, args = {native, 3000}}) table.insert(startAnim, {func = AnimCaption, args = {native, loc("With the rest of the tribe gone, it was up to ") .. nativeNames[m5DeployedNum] .. loc(" to save the village."), 5000}}) table.insert(startAnim, {func = AnimCaption, args = {native, loc("But it proved to be no easy task!"), 2000}}) for i = 1, 4 do table.insert(startAnim, {func = FollowGear, swh = false, args = {cyborgs[i]}}) table.insert(startAnim, {func = AnimWait, args = {native, 1000}}) end table.insert(startAnim, {func = FollowGear, swh = false, args = {native}}) if m == leaksNum then table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("What a strange cave!"), SAY_THINK, 0}}) table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("Now how do I get on the other side?!"), SAY_THINK, 5500}}) elseif m == denseNum then table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("Dude, what's this place?!"), SAY_THINK, 0}}) table.insert(startAnim, {func = AnimCustomFunction, args = {native, EmitDenseClouds, {"Right"}}}) table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("And where's all the weed?"), SAY_THINK, 4000}}) elseif m == waterNum then table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("Is this place in my head?"), SAY_THINK, 0}}) table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("I shouldn't have drunk that last pint."), SAY_THINK, 6000}}) elseif m == buffaloNum then table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("Where did that alien run?"), SAY_THINK, 0}}) table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("When I find it..."), SAY_THINK, 3000}}) elseif m == girlNum then table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("This is typical!"), SAY_THINK, 0}}) table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("It's always up to women to clear up the mess men created!"), SAY_THINK, 8500}}) elseif m == chiefNum then table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("What is this place?"), SAY_THINK, 0}}) table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("It doesn't matter. I won't let that alien hurt my daughter!"), SAY_THINK, 8500}}) elseif m == wiseNum then table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 50, 0}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("Every single time!"), SAY_THINK, 0}}) table.insert(startAnim, {func = AnimMove, args = {native, "Right", nativePos[1] + 200, 0}}) 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}}) end table.insert(startAnim, {func = AnimCustomFunction, args = {native, RestoreHedge, {cyborg, unpack(cyborgPos)}}}) table.insert(startAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(cyborgPos)}}) table.insert(startAnim, {func = AnimTurn, args = {cyborg, "Left"}}) table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("Greetings, ") .. nativeUnNames[m] .. "!", SAY_SAY, 2500}}) 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}}) table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("I wish to help you, ") .. nativeUnNames[m] .. "!", SAY_SAY, 4000}}) table.insert(startAnim, {func = AnimSay, args = {cyborg, loc("Beware, though! If you are slow, you die!"), SAY_SAY, 7000}}) table.insert(startAnim, {func = AnimDisappear, args = {cyborg, unpack(cyborgPos)}}) table.insert(startAnim, {func = AnimSwitchHog, args = {native}}) table.insert(startAnim, {func = AnimCustomFunction, args = {native, HideHedge, {cyborg}}}) table.insert(startAnim, {func = AnimSay, args = {native, loc("Talk about mixed signals..."), SAY_SAY, 4000}}) AddSkipFunction(startAnim, SkipStartAnim, {}) end function SetupKillAnim() table.insert(killAnim, {func = AnimSay, args = {native, loc("Well, that was a waste of time."), SAY_THINK, 5000}}) table.insert(killAnim, {func = AnimCustomFunction, args = {native, RestoreHedge, {cyborg, unpack(cyborgPos)}}}) table.insert(killAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(cyborgPos)}}) table.insert(killAnim, {func = AnimCustomFunction, args = {cyborg, CondNeedToTurn, {cyborg, native}}}) table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("You bear impressive skills, ") .. nativeUnNames[m5DeployedNum] .. "!", SAY_SHOUT, 4000}}) table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("However, my mates don't agree with me on letting you go..."), SAY_SHOUT, 7000}}) table.insert(killAnim, {func = AnimSay, args = {cyborg, loc("I guess you'll have to kill them."), SAY_SHOUT, 4000}}) table.insert(killAnim, {func = AnimDisappear, args = {cyborg, unpack(cyborgPos)}}) table.insert(killAnim, {func = AnimSwitchHog, args = {native}}) table.insert(killAnim, {func = AnimWait, args = {native, 1}}) table.insert(killAnim, {func = AnimCustomFunction, args = {native, HideHedge, {cyborg}}}) AddSkipFunction(killAnim, SkipKillAnim, {}) end function SetupKilledAnim() table.insert(killedAnim, {func = AnimWait, args = {cyborg, 500}}) table.insert(killedAnim, {func = AnimOutOfNowhere, args = {cyborg, unpack(secondPos[2])}}) table.insert(killedAnim, {func = AnimOutOfNowhere, args = {native, unpack(secondPos[1])}}) table.insert(killedAnim, {func = AnimCustomFunction, args = {cyborg, CondNeedToTurn, {cyborg, native}}}) table.insert(killedAnim, {func = AnimSay, args = {cyborg, loc("Nice work, ") .. nativeUnNames[m5DeployedNum] .. "!", SAY_SHOUT, 4000}}) table.insert(killedAnim, {func = AnimSay, args = {cyborg, loc("As a reward for your performance, here's some new technology!"), SAY_SHOUT, 8000}}) table.insert(killedAnim, {func = AnimSay, args = {cyborg, loc("Use it wisely!"), SAY_SHOUT, 3000}}) table.insert(killedAnim, {func = AnimDisappear, args = {cyborg, unpack(secondPos[2])}}) table.insert(killedAnim, {func = AnimSwitchHog, args = {native}}) AddSkipFunction(killedAnim, SkipKilledAnim, {}) end --------------------------Anim skip functions-------------------------- function SkipStartAnim() AnimSwitchHog(native) AnimWait(native, 1) AddFunction({func = HideHedge, args = {cyborg}}) end function AfterStartAnim() SetGearMessage(native, 0) cratesNum = 0 for i = 1, 6 do crates[i] = SpawnAmmoCrate(unpack(cratePos[i])) cratesNum = cratesNum + 1 end FollowGear(native) AddNewEvent(CheckGearsDead, {{crates[1], crates[2]}}, PutCrates, {2}, 0) TurnTimeLeft = TurnTime ShowMission(loc("Dragon's Lair"), loc("Obstacle course"), loc("In order to get to the other side, you need to collect the crates first.|") .. loc("As the ammo is sparse, you might want to reuse ropes while mid-air.|") .. loc("The enemy can't move but it might be a good idea to stay out of sight!|") .. string.format(loc("You have %d turns until Sudden Death! Better hurry!"), SuddenDeathTurns), 1, 0) end function SkipKillAnim() AnimSwitchHog(native) AnimWait(native, 1) AddFunction({func = HideHedge, args = {cyborg}}) end function AfterKillAnim() PutWeaponCrates() TurnTimeLeft = TurnTime AddEvent(CheckCyborgsDead, {}, DoCyborgsDead, {}, 0) ShowMission(loc("Dragon's Lair"), loc("The Slaughter"), loc("Kill the aliens!"), 1, 2000) end function SkipKilledAnim() AnimSetGearPosition(native, unpack(secondPos[1])) AnimSwitchHog(native) AnimWait(native, 1) end function AfterKilledAnim() HideHedge(cyborg) TurnTimeLeft = TurnTime SetGearMessage(native, 0) AddAmmo(native, amPortalGun, 100) SpawnUtilityCrate(2259, 755, amTeleport, 2) SpawnHealthCrate(secondPos[1][1] + 30, secondPos[1][2]) 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!|").. loc("Portal hint: one goes to the destination, and one is the entrance.|").. loc("Teleport hint: just use the mouse to select the destination!"), 1, 0) end -----------------------------Events------------------------------------ function CheckCyborgsDead() return cyborgsLeft == 0 end function NullifyAmmo() AddAmmo(native, amRope, 0) AddAmmo(native, amGirder, 0) AddAmmo(native, amLowGravity, 0) AddAmmo(native, amBazooka, 0) AddAmmo(native, amSniperRifle, 0) AddAmmo(native, amDEagle, 0) AddAmmo(native, amDynamite, 0) AddAmmo(native, amFirePunch, 0) AddAmmo(native, amBaseballBat, 0) AddAmmo(native, amMortar, 0) AddAmmo(native, amSnowball, 0) AddAmmo(native, amShotgun, 0) end function DoCyborgsDead() NullifyAmmo() RestoreHedge(cyborg) SetupKilledAnim() SetGearMessage(CurrentHedgehog, 0) AddAnim(killedAnim) AddFunction({func = AfterKilledAnim, args = {}}) end function PutWeaponCrates() for i = 1, 8 do cratesNum = cratesNum + 1 crates[cratesNum] = SpawnAmmoCrate(unpack(cratePos[cratesNum])) end FollowGear(native) end function DoCratesTaken() SetupKillAnim() SetGearMessage(CurrentHedgehog, 0) AddAnim(killAnim) AddFunction({func = AfterKillAnim, args = {}}) end function PutCrates(index) if index <= 7 then cratesNum = cratesNum + 1 crates[cratesNum] = SpawnUtilityCrate(unpack(cratePos[cratesNum])) AddNewEvent(CheckGearDead, {crates[cratesNum]}, PutCrates, {index + 1}, 0) FollowGear(native) else AddEvent(StoppedGear, {native}, DoCratesTaken, {}, 0) end if index == 4 then AnimSay(native, loc("I'm a ninja."), SAY_THINK, 0) end end function CheckMissionFinished() return gearDead[jetCrate] == true end function DoMissionFinished() AddCaption(loc("Salvation was one step closer now...")) if progress and progress<6 then SaveCampaignVar("Progress", "6") end RestoreHedge(cyborg) DeleteGear(cyborg) TurnTimeLeft = 0 end function CheckGearsDead(gearList) for i = 1, # gearList do if gearDead[gearList[i]] ~= true then return false end end return true end function CheckGearDead(gear) return gearDead[gear] end function EndMission() RestoreHedge(cyborg) DeleteGear(cyborg) TurnTimeLeft = 0 end function CheckFreshDead() return freshDead ~= nil end function CyborgDeadReact() freshDead = nil if cyborgsLeft == 0 then return end AnimSay(native, reactions[cyborgsLeft]) end -----------------------------Misc-------------------------------------- function HideHedge(hedge) if hedgeHidden[hedge] ~= true then HideHog(hedge) hedgeHidden[hedge] = true end end function RestoreHedge(hedge) if hedgeHidden[hedge] == true then RestoreHog(hedge) hedgeHidden[hedge] = false end end function GetVariables() progress = tonumber(GetCampaignVar("Progress")) m5DeployedNum = tonumber(GetCampaignVar("M5DeployedNum")) end function SetupPlace() for i = 1, 7 do if i ~= m5DeployedNum then DeleteGear(natives[i]) else native = natives[i] end end HideHedge(cyborg) jetCrate = SpawnUtilityCrate(3915, 1723, amJetpack) AddGear(1071, 1913, gtMine, 0, 0, 0, 0) AddGear(1098, 1919, gtMine, 0, 0, 0, 0) AddGear(1136, 1923, gtMine, 0, 0, 0, 0) AddGear(1170, 1930, gtMine, 0, 0, 0, 0) AddGear(1203, 1924, gtMine, 0, 0, 0, 0) AddGear(1228, 1939, gtMine, 0, 0, 0, 0) AddGear(1264, 1931, gtMine, 0, 0, 0, 0) AddGear(1309, 1938, gtMine, 0, 0, 0, 0) AddGear(1352, 1936, gtMine, 0, 0, 0, 0) AddGear(1386, 1939, gtMine, 0, 0, 0, 0) AddGear(1432, 1942, gtMine, 0, 0, 0, 0) AddGear(1483, 1950, gtMine, 0, 0, 0, 0) AddGear(1530, 1954, gtMine, 0, 0, 0, 0) AddGear(1579, 1959, gtMine, 0, 0, 0, 0) AddGear(1000, 1903, gtMine, 0, 0, 0, 0) AddGear(957, 1903, gtMine, 0, 0, 0, 0) AddGear(909, 1910, gtMine, 0, 0, 0, 0) AddGear(889, 1917, gtMine, 0, 0, 0, 0) ------ STICKY MINE LIST ------ tempG = AddGear(1199, 733, gtSMine, 0, 0, 0, 0) tempG = AddGear(1195, 793, gtSMine, 0, 0, 0, 0) tempG = AddGear(1201, 861, gtSMine, 0, 0, 0, 0) tempG = AddGear(682, 878, gtSMine, 0, 0, 0, 0) tempG = AddGear(789, 876, gtSMine, 0, 0, 0, 0) end function SetupEvents() AddNewEvent(CheckMissionFinished, {}, DoMissionFinished, {}, 0) AddNewEvent(CheckGearDead, {native}, EndMission, {}, 0) AddNewEvent(CheckFreshDead, {}, CyborgDeadReact, {}, 1) end function SetupAmmo() AddAmmo(cyborgs[1], amBazooka, 100) AddAmmo(cyborgs[1], amShotgun, 100) AddAmmo(cyborgs[1], amSwitch, 100) end function AddHogs() AddTeam(loc("Natives"), 29439, "Bone", "Island", "HillBilly", "cm_birdy") for i = 1, 7 do natives[i] = AddHog(nativeNames[i], 0, 200, nativeHats[i]) gearDead[natives[i]] = false end AddTeam(loc("011101001"), 14483456, "ring", "UFO", "Robot", "cm_binary") cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1") gearDead[cyborg] = false AddTeam(loc("011101000"), 14483455, "ring", "UFO", "Robot", "cm_binary") for i = 1, 4 do cyborgs[i] = AddHog(cyborgNames[i], 2, 100, "cyborg2") gearDead[cyborgs[i]] = false end cyborgsLeft = 4 for i = 1, 7 do AnimSetGearPosition(natives[i], unpack(nativePos)) end AnimSetGearPosition(cyborg, unpack(cyborgPos)) for i = 1, 4 do AnimSetGearPosition(cyborgs[i], unpack(cyborgsPos[i])) AnimTurn(cyborgs[i], cyborgsDir[i]) end end function CondNeedToTurn(hog1, hog2) xl, xd = GetX(hog1), GetX(hog2) if xl > xd then AnimInsertStepNext({func = AnimTurn, args = {hog1, "Left"}}) AnimInsertStepNext({func = AnimTurn, args = {hog2, "Right"}}) elseif xl < xd then AnimInsertStepNext({func = AnimTurn, args = {hog2, "Left"}}) AnimInsertStepNext({func = AnimTurn, args = {hog1, "Right"}}) end end -----------------------------Main Functions---------------------------- function onGameInit() Seed = 0 GameFlags = gfSolidLand + gfDisableLandObjects + gfDisableWind + gfDisableGirders TurnTime = 60000 CaseFreq = 0 MinesNum = 0 MinesTime = 5000 Explosives = 0 Delay = 10 MapGen = mgDrawn Theme = "City" SuddenDeathTurns = 25 for i = 1, #map do ParseCommand('draw ' .. map[i]) end AddHogs() AnimInit() end function onGameStart() GetVariables() SetupAmmo() SetupPlace() AnimationSetup() SetupEvents() AddAnim(startAnim) AddFunction({func = AfterStartAnim, args = {}}) ShowMission(loc("Dragon's Lair"), loc("Y Chwiliad"), loc("Find your tribe!|Cross the lake!"), 1, 0) end function onGameTick() AnimUnWait() if ShowAnimation() == false then return end ExecuteAfterAnimations() CheckEvents() end function onGearDelete(gear) gearDead[gear] = true if GetGearType(gear) == gtHedgehog then if GetHogTeamName(gear) == loc("011101000") then freshDead = GetHogName(gear) cyborgsLeft = cyborgsLeft - 1 end end end function onAmmoStoreInit() SetAmmo(amFirePunch, 3, 0, 0, 0) SetAmmo(amBaseballBat, 2, 0, 0, 0) SetAmmo(amGirder, 0, 0, 0, 2) SetAmmo(amLowGravity, 0, 0, 0, 1) SetAmmo(amSkip, 9, 0, 0, 0) end function onNewTurn() if AnimInProgress() then TurnTimeLeft = -1 return end if GetHogTeamName(CurrentHedgehog) == loc("011101000") then SetInputMask(band(0xFFFFFFFF, bnot(gmLeft + gmRight + gmLJump + gmHJump))) for i = 1, 4 do if gearDead[CurrentHedgehog] ~= true and gearDead[native] ~= true then if gearDead[cyborgs[i]] ~= true and GetX(cyborgs[i]) < GetX(native) then HogTurnLeft(cyborgs[i], false) else HogTurnLeft(cyborgs[i], true) end end end if TotalRounds % 6 == 0 then AddAmmo(CurrentHedgehog, amSniperRifle, 1) AddAmmo(CurrentHedgehog, amDEagle, 1) end TurnTimeLeft = 30000 elseif GetHogTeamName(CurrentHedgehog) == loc("011101001") then TurnTimeLeft = 0 else SetInputMask(0xFFFFFFFF) AddCaption(loc("Turns until Sudden Death: ") .. SuddenDeathTurns - TotalRounds) end end function onPrecise() if GameTime > 2500 and AnimInProgress() then SetAnimSkip(true) end end