diff -r 92af50454cf2 -r 8054d9d775fd share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/dragon.lua --- a/share/hedgewars/Data/Missions/Campaign/A Classic Fairytale/dragon.lua Fri Oct 11 11:55:31 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,652 +0,0 @@ -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("If you wish to restart the course, hold [Precise] while your turn ends (e.g with Skip)!|") .. - loc("The enemy can't move but it might be a good idea to stay out of sight!|") .. - loc("You have ") .. SuddenDeathTurns .. loc(" turns until Sudden Death! Better hurry!"), 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) - - SetTimer(AddGear(1071, 1913, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1098, 1919, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1136, 1923, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1170, 1930, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1203, 1924, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1228, 1939, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1264, 1931, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1309, 1938, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1352, 1936, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1386, 1939, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1432, 1942, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1483, 1950, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1530, 1954, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1579, 1959, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(1000, 1903, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(957, 1903, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(909, 1910, gtMine, 0, 0, 0, 0), 5000) - SetTimer(AddGear(889, 1917, gtMine, 0, 0, 0, 0), 5000) - ------ 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], amSniperRifle, 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_star") - cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1") - gearDead[cyborg] = false - - AddTeam(loc("011101000"), 14483455, "ring", "UFO", "Robot", "cm_star") - 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 = 20 - MinesTime = 3000 - Explosives = 6 - Delay = 10 - MapGen = 2 - 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 - if AnimInProgress() == false then - end -end - -function onPreciseUp() -end