global { za_convoy_gone = false; }; za_gate_foot = room { nam = "Вход в Нлейисланотр"; handwheel_room = "za_gate"; underwater = true; no_exit = [[ Нет смысла покидать Левиафан здесь. ]]; view = [[ Через иллюминаторы вы видите перед собой высокие металлические ворота Нлейисланотра. С обеих сторон от них стоят две смотровые башни, на вершинах которых горят красные огоньки. ]]; }; za_gate = dlg { var { state = 0; }; nam = "Левиафан, рубка"; entered = function(s) if (s.state == 0) then s.state = 1; if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then psub("learr"); return [[ Как только Левиафан приближается к городу, массивные металлические ворота начинают закрываться. Огни на башнях окрашиваются красным, а по всему городу начинается какое-то волнение. В рубку поднимается Леарр. Она встает рядом с вами и, окидывая взглядом город, произносит: "Мы туда-не-идем. Они не-пускают-нас". ]]; else psub("anna"); return [[ Как только Левиафан приближается к городу, массивные металлические ворота начинают закрываться. Огни на башнях окрашиваются красным, а по всему городу начинается какое-то волнение. В рубку поднимается Анна. Она встает рядом с вами и, окидывая взглядом город, произносит: "Кажется, нам здесь не рады". ]]; end; else psub("control"); return [[ Левиафан находится перед массивными металлическими воротами Нлейисланотра. Огни на башнях горят ярко-красным, сообщая вам что пути нет. ]]; end; end; phr = { {tag="learr"}; {"[Остановить субмарину] И что нам делать?", [[ Леарр пожимает плечами: "Мы незаметными-пройти-должны. Сильнее-они так-как много-их". ]], code [[ psub("control"); ]]}; {"[Продолжать движение] Попробуем преподать им урок", code = [[ walk("game_over_za_learr"); ]]}; {tag="anna"}; {"[Остановить субмарину] И что нам делать?", [[ Анна пожимает плечами: "Понятия не имею". ]], code [[ psub("control"); ]]}; {"[Продолжать движение] Попробуем преподать им урок", code = [[ walk("game_over_za_anna"); ]]}; {tag="control"}; {always = true, "[Проплыть над воротами]", code = [[ if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then walk("game_over_za_learr"); else walk("game_over_za_anna"); end; ]]}; {always = true, "[Двигаться вдоль стен]", code = [[ move(submarine_leviathan, "za_crack_foot"); walk("za_crack"); ]]}; {always = true, "[Отправиться в другое место]", code = [[ walk("leviathan_handwheel"); ]]}; {always = true, "[Отойти от штурвала]", code = [[ walk("leviathan_wheelhouse"); ]]}; }; }; za_crack_foot = room { nam = "Вход в Нлейисланотр"; handwheel_room = "za_crack"; underwater = true; dsc = [[ Перед вами возвышается каменная стена древнего города. Через широкую трещину в ней вы вполне можете попытаться попасть на другую сторону. ]]; view = [[ Через иллюминаторы вы видите высокие стены Нлейисланотра. Мощный луч прожектора освещает едва заметную трещину в стене. Быть может, вы сможете незаметно пробраться через нее в город. ]]; way = { kh_vroom("В Левиафан", leviathan_airlock); kh_vroom("В трещину", "za_crack_inside"); }; }; za_crack = dlg { nam = "Левиафан, рубка"; entered = [[ Левиафан находится у стены Нлейисланотра. Огни на башнях погашены, сообщая что навьяры скорее всего не придают значения вашему присутствию. ]]; phr = { {always = true, "[Вернуться к воротам]", code = [[ move(submarine_leviathan, "za_gate_foot"); walk("za_gate"); ]]}; {always = true, "[Отправиться в другое место]", code = [[ walk("leviathan_handwheel"); ]]}; {always = true, "[Отойти от штурвала]", code = [[ walk("leviathan_wheelhouse"); ]]}; }; }; za_convoy_route = { "za_cross_6", "za_street_11", "za_cross_5", "za_street_13", "za_cross_24", "za_street_15", "za_cross_7", "za_street_16", "za_cross_8", "za_street_22", "za_cross_11", "za_street_23", "za_cross_12", "za_street_41", "za_cross_22", "za_street_42", "za_cross_23", "za_street_44", "za_cross_15", "za_street_27", "za_prison_entrance", "za_prison" }; za_convoy = { position = null; direction = 'za_cross_6'; index = 1; life = function(s) local loc = stead.deref(here()); for i = 1, #za_convoy_messages do if (za_convoy_messages[i][1] == loc and za_convoy_messages[i][2] == za_convoy.position) then pr(za_convoy_messages[i][3]); end; end; if (za_convoy.index > #za_convoy_route) then --TODO Конвой ушол za_convoy_gone = true; timer:stop(); game.timer = nil; lifeoff(za_convoy); else za_convoy.direction = za_convoy_route[za_convoy.index]; if (loc == za_convoy.position) then --TODO Бой начинается timer:stop(); game.timer = nil; lifeoff(za_convoy); enter(za_phaetlarr_fight_intro); end; end; end; }; za_convoy_messages = { --here--new_position--message-- {"za_street_12", "za_cross_6", "Конвой выходит на перекресток к северу от вас. Навьяры поворачивают в противоположную от вас сторону и продолают свой путь. "}, {"za_street_11", "za_cross_6", "Конвой выходит на перекресток к северу от вас. Навьяры поворачивают в вашу сторону и продолают свой путь. "}, {"za_street_12", "za_street_11", "Конвой удаляется на север. "}, {"za_cross_6", "za_street_11", "Конвой движется на север. "}, {"za_cross_5", "za_street_11", "Конвой приближается к вам. "}, {"za_cross_6", "za_cross_5", "Конвой удаляется на север. "}, {"za_street_11", "za_cross_5", "Конвой движется на север. "}, {"za_street_10", "za_cross_5", "Конвой приближается к вам. "}, {"za_street_13", "za_cross_5", "Конвой выходит на перекресток к востоку от вас. "}, {"za_street_10", "za_street_13", "Конвой сворачивает на улицу к западу. "}, {"za_street_11", "za_street_13", "Конвой сворачивает на улицу к западу. "}, {"za_cross_24", "za_street_13", "Конвой приближается к вас с востока. "}, {"za_street_14", "za_cross_24", "Конвой выходит на перекресток к югу от вас. "}, {"za_street_15", "za_cross_24", "Конвой выходит на перекресток к северу от вас. "}, {"za_street_14", "za_street_15", "Конвой удаляется от вас на юг. "}, {"za_cross_24", "za_street_15", "Конвой движется от вас на юг. "}, {"za_cross_7", "za_street_15", "Конвой приближается к вас с севера. "}, {"za_deadend_3n", "za_cross_7", "Конвой выходит на перекресток к северу от вас. "}, {"za_cross_24", "za_cross_7", "Конвой удаляется на юг. "}, {"za_street_15", "za_cross_7", "Конвой движется на юг. "}, {"za_street_16", "za_cross_7", "Конвой выходит на перекресток к востоку от вас. "}, {"za_deadend_3n", "za_street_16", "Конвой уходит на запад. "}, {"za_street_15", "za_street_16", "Конвой уходит на запад. "}, {"za_cross_7", "za_street_16", "Конвой уходит на запад. "}, {"za_cross_8", "za_street_16", "Конвой приближается с востока. "}, {"za_street_17", "za_cross_8", "Конвой выходит на перекресток к югу от вас. "}, {"za_street_22", "za_cross_8", "Конвой выходит на перекресток к востоку от вас. "}, {"za_street_16", "za_cross_8", "Конвой уходит на запад. "}, {"za_cross_7", "za_cross_8", "Конвой удаляется на запад. "}, {"za_cross_7", "za_street_22", "Конвой удаляется на запад. "}, {"za_street_16", "za_street_22", "Конвой движется на запад. "}, {"za_street_17", "za_street_22", "Конвой движется на запад. "}, {"za_cross_11", "za_street_22", "Конвой приближается с востока. "}, {"za_cross_8", "za_cross_11", "Конвой удаляется на запад. "}, {"za_street_22", "za_cross_11", "Конвой движется на запад. "}, {"za_street_21", "za_cross_11", "Конвой выходит на перекресток к югу от вас. "}, {"za_street_36", "za_cross_11", "Конвой выходит на перекресток к востоку от вас. "}, {"za_street_23", "za_cross_11", "Конвой выходит на перекресток к северу от вас. "}, {"za_street_22", "za_street_23", "Конвой движется на юг. "}, {"za_street_21", "za_street_23", "Конвой удаляется на юг. "}, {"za_street_36", "za_street_23", "Конвой движется на юг. "}, {"za_cross_11", "za_street_23", "Конвой движется на юг. "}, {"za_cross_12", "za_street_23", "Конвой приближается с севера. "}, {"za_cross_11", "za_cross_12", "Конвой удаляется на юг. "}, {"za_street_23", "za_cross_12", "Конвой выходит на перекресток к югу от вас. "}, {"za_street_46", "za_cross_12", "Конвой выходит на перекресток к востоку от вас. "}, {"za_street_24", "za_cross_12", "Конвой выходит на перекресток к западу от вас. "}, {"za_street_41", "za_cross_12", "Конвой выходит на перекресток к северу от вас. "}, {"za_street_23", "za_street_41", "Конвой удаляется на юг. "}, {"za_cross_12", "za_street_41", "Конвой движется на юг. "}, {"za_street_46", "za_street_41", "Конвой движется на юг. "}, {"za_street_24", "za_street_41", "Конвой движется на юг. "}, {"za_cross_22", "za_street_41", "Конвой приближается с севера. "}, {"za_cross_12", "za_cross_22", "Конвой удаляется на юг. "}, {"za_street_41", "za_cross_22", "Конвой выходит на перекресток к югу от вас. "}, {"za_street_45", "za_cross_22", "Конвой выходит на перекресток к востоку от вас. "}, {"za_street_42", "za_cross_22", "Конвой выходит на перекресток к западу от вас. "}, {"za_street_40", "za_cross_22", "Конвой выходит на перекресток к северу от вас. "}, {"za_street_41", "za_street_42", "Конвой движется на восток. "}, {"za_street_40", "za_street_42", "Конвой движется на восток. "}, {"za_cross_22", "za_street_42", "Конвой движется на восток. "}, {"za_street_45", "za_street_42", "Конвой удаляется на восток. "}, {"za_cross_23", "za_street_42", "Конвой приближается с запада. "}, {"za_cross_22", "za_cross_23", "Конвой удаляется на восток. "}, {"za_street_42", "za_cross_23", "Конвой выходит на перекресток к востоку от вас. "}, {"za_street_43", "za_cross_23", "Конвой выходит на перекресток к югу от вас. "}, {"za_street_44", "za_cross_23", "Конвой выходит на перекресток к западу от вас. "}, {"za_street_42", "za_street_44", "Конвой удаляется на восток. "}, {"za_cross_23", "za_street_44", "Конвой движется на восток. "}, {"za_street_43", "za_street_44", "Конвой движется на восток. "}, {"za_cross_15", "za_street_44", "Конвой приближается с запада. "}, {"za_cross_23", "za_cross_15", "Конвой удаляется на восток. "}, {"za_street_44", "za_cross_15", "Конвой выходит на перекресток к востоку от вас. "}, {"za_street_26", "za_cross_15", "Конвой выходит на перекресток к югу от вас. "}, {"za_street_35", "za_cross_15", "Конвой выходит на перекресток к северу от вас. "}, {"za_street_27", "za_cross_15", "Конвой выходит на перекресток к западу от вас. "}, {"za_street_44", "za_street_27", "Конвой удаляется на восток. "}, {"za_cross_15", "za_street_27", "Конвой движется на восток. "}, {"za_street_26", "za_street_27", "Конвой движется на восток. "}, {"za_street_35", "za_street_27", "Конвой движется на восток. "}, {"za_prison_entrance", "za_street_27", "Конвой приближается с запада. "}, {"za_cross_15", "za_prison_entrance", "Конвой удаляется на восток. "}, {"za_street_27", "za_prison_entrance", "Конвой приближается ко входу в здание. "}, {"za_deadend_2s", "za_prison_entrance", "Конвой приближается ко входу в здание к югу от вас. "}, {"za_street_28", "za_prison_entrance", "Конвой приближается ко входу в здание. "}, {"za_street_27", "za_prison", "Двери здания мгновенно раскрываются, впуская навьяров, после чего столь же быстро закрываются. "}, {"za_deadend_2s", "za_prison", "Двери здания мгновенно раскрываются, впуская навьяров, после чего столь же быстро закрываются. "}, {"za_street_28", "za_prison", "Двери здания мгновенно раскрываются, впуская навьяров, после чего столь же быстро закрываются. "} }; za_timer = function() local loc = stead.deref(here()); za_convoy.index = za_convoy.index + 1; za_convoy.position = za_convoy.direction; for i = 1, #za_convoy_messages do if (za_convoy_messages[i][1] == loc and za_convoy_messages[i][2] == za_convoy.position) then pr(za_convoy_messages[i][3]); end; end; if (za_convoy.index > #za_convoy_route) then --TODO Конвой ушол print("Konvoy left"); timer:stop(); game.timer = nil; lifeoff(za_convoy); else za_convoy.direction = za_convoy_route[za_convoy.index]; if (loc == za_convoy.position) then --TODO Бой начинается timer:stop(); game.timer = nil; lifeoff(za_convoy); enter(za_phaetlarr_fight_intro); end; end; end; za_alley = inherit(room, function(s) if (not s.disp) then s.disp = "Нлейисланотр, проулок"; end; if (not s.dsc) then s.dsc = [[ Вы находитесь посреди узкого проулка где-то в Нлейисланотре. ]]; end; return s; end); za_street = inherit(room, function(s) if (not s.disp) then s.disp = "Нлейисланотр, улица"; end; if (not s.dsc) then s.dsc = [[ Вы находитесь посреди улицы где-то в Нлейисланотре. ]]; end; return s; end); za_deadend = inherit(room, function(s) if (not s.disp) then s.disp = "Нлейисланотр, тупик"; end; if (not s.dsc) then s.dsc = [[ Вы находитесь в тупике где-то в Нлейисланотре. ]]; end; return s; end); za_cross = inherit(room, function(s) if (not s.disp) then s.disp = "Нлейисланотр, перекресток"; end; if (not s.dsc) then s.dsc = [[ Вы находитесь на перекрестке где-то в Нлейисланотре. ]]; end; return s; end); za_crack_inside = za_alley { nam = "za_crack_inside"; disp = "Нлейисланотр, у трещины в стене"; dsc = [[ Вы находитесь в небольшом проулке на окраине Нлейисланотра. К западу от вас возвышается городская стена, а с востока и севера вы видите стены домов. ]]; way = { kh_vroom("На юг", "za_alley_1"); kh_vroom("В трещину", "za_crack_foot"); }; }; za_alley_1 = za_alley { nam = "za_alley_1"; way = { kh_vroom("На юг", "za_alley_2"); kh_vroom("На север", "za_crack_inside"); }; }; za_alley_2 = za_alley { nam = "za_alley_2"; way = { kh_vroom("На юг", "za_deadend_1n"); kh_vroom("На север", "za_alley_1"); kh_vroom("На восток", "za_street_1"); }; }; za_deadend_1n = za_deadend{ nam = "za_deadend_1n"; way = { kh_vroom("На север", "za_alley_2"); }; }; za_street_1 = za_street { nam = "za_street_1"; way = { kh_vroom("На запад", "za_alley_2"); kh_vroom("На восток", "za_cross_1"); }; }; za_cross_1 = za_cross { var { state = 0; }; nam = "za_cross_1"; enter = function(s) if (s.state == 0) then s.state = 1; walkin("za_cutscene_1"); end; end; way = { kh_vroom("На юг", "za_street_20"); kh_vroom("На север", "za_street_2"); kh_vroom("На запад", "za_street_1"); kh_vroom("На восток", "za_street_4"); }; }; za_cutscene_1 = cutscene("za_cutscene_1", "Нлейисланотр, перекресток", [[ Из темной невзрачной улицы вы выходите в город. Древние каменные и металлические сооружения возвышаются над вами. Вы стоите посреди просторного перекрестка. Дороги ведут во все стороны. Сейчас посреди ночи улицы города пустынны и вы можете спокойно обследовать их. ]], "za_cross_1"); za_street_2 = za_street { nam = "za_street_2"; way = { kh_vroom("На юг", "za_cross_1"); kh_vroom("На север", "za_street_3"); }; }; za_street_3 = za_street { nam = "za_street_3"; dsc = [[ Вы находитесь посреди улицы где-то в Нлейисланотре. К северу от вас стоят несколько навьяров, опершись на стену дома. ]]; way = { kh_vroom("На юг", "za_street_2"); kh_vroom("На север", function() pr [[ Если они меня увидят, то поднимут тревогу. ]]; return false; end); }; }; za_street_4 = za_street { nam = "za_street_4"; way = { kh_vroom("На запад", "za_cross_1"); kh_vroom("На восток", "za_cross_2"); }; }; za_cross_2 = za_cross { nam = "za_cross_2"; way = { kh_vroom("На юг", "za_street_18"); kh_vroom("На север", "za_street_5"); kh_vroom("На запад", "za_street_4"); kh_vroom("На восток", "za_street_6"); }; }; za_street_5 = za_street { nam = "za_street_5"; way = { kh_vroom("На юг", "za_cross_2"); }; }; za_street_6 = za_street { nam = "za_street_6"; way = { kh_vroom("На запад", "za_cross_2"); kh_vroom("На северо-восток", "za_street_7"); }; }; za_street_7 = za_street { nam = "za_street_7"; way = { kh_vroom("На юго-запад", "za_street_6"); kh_vroom("На восток", "za_cross_3"); }; }; za_cross_3 = za_cross { nam = "za_cross_3"; way = { kh_vroom("На юго-восток", "za_street_9"); kh_vroom("На запад", "za_street_7"); kh_vroom("На северо-запад", "za_street_8"); }; }; za_street_8 = za_street { nam = "za_street_8"; way = { kh_vroom("На юго-восток", "za_cross_3"); }; }; za_street_9 = za_street { nam = "za_street_9"; way = { kh_vroom("На северо-запад", "za_cross_3"); kh_vroom("На юг", "za_cross_4"); }; }; za_cross_4 = za_cross { nam = "za_cross_4"; dsc = [[ Вы находитесь посреди улицы где-то в Нлейисланотре. Улица на востоке завалена камнями и заросла водорослями. ]]; way = { kh_vroom("На юг", "za_street_10"); kh_vroom("На север", "za_street_9"); kh_vroom("На восток", function(s) pr [[ Я не пройду здесь. ]]; return false; end); }; }; za_street_10 = za_street { nam = "za_street_10"; way = { kh_vroom("На юг", "za_cross_5"); kh_vroom("На север", "za_cross_4"); }; }; za_cross_5 = za_cross { nam = "za_cross_5"; way = { kh_vroom("На юг", "za_street_11"); kh_vroom("На север", "za_street_10"); kh_vroom("На запад", "za_street_13"); }; }; za_street_11 = za_street { nam = "za_street_11"; way = { kh_vroom("На юг", "za_cross_6"); kh_vroom("На север", "za_cross_5"); }; }; za_cross_6 = za_cross { var { state = 0; }; nam = "za_cross_6"; entered = function(s) if (s.state == 0) then s.state = 1; pr("С востока к вам приближается группа навьяров. Четверо из них вооружены копьями с ними идет еще один, не вооруженный. Судя по тому, как они обращаются с ним - он пленник. "); game.timer = za_timer; timer:set(2000); lifeon(za_convoy); end; end; dsc = [[ Вы находитесь посреди улицы где-то в Нлейисланотре. На востоке вы видите нескольких навьярских воинов. ]]; way = { kh_vroom("На юг", "za_street_12"); kh_vroom("На север", "za_street_11"); kh_vroom("На восток", function(s) pr [[ Если они меня увидят, то поднимут тревогу. ]]; end); }; }; za_street_12 = za_street { nam = "za_street_12"; way = { kh_vroom("На юг", "za_deadend_2n"); kh_vroom("На север", "za_cross_6"); }; }; za_deadend_2n = za_deadend { nam = "za_deadend_2n"; way = { kh_vroom("На север", "za_street_12"); }; }; za_street_13 = za_street { nam = "za_street_13"; way = { kh_vroom("На запад", "za_cross_24"); kh_vroom("На восток", "za_cross_5"); }; }; za_cross_24 = za_cross { nam = "za_cross_24"; way = { kh_vroom("На юг", "za_street_15"); kh_vroom("На север", "za_street_14"); kh_vroom("На восток", "za_street_13"); }; }; za_street_14 = za_street { nam = "za_street_14"; way = { kh_vroom("На юг", "za_cross_24"); }; }; za_street_15 = za_street { nam = "za_street_15"; way = { kh_vroom("На юг", "cross_7"); kh_vroom("На север", "za_cross_24"); }; }; za_cross_7 = za_cross { nam = "za_cross_7"; way = { kh_vroom("На юг", "za_deadend_3n"); kh_vroom("На север", "za_street_15"); kh_vroom("На запад", "za_street_16"); }; }; za_deadend_3n = za_deadend { nam = "za_deadend_3n"; way = { kh_vroom("На север", "za_cross_7"); }; }; za_street_16 = za_street { nam = "za_street_16"; way = { kh_vroom("На запад", "za_cross_8"); kh_vroom("На восток", "za_cross_7"); }; }; za_cross_8 = za_cross { nam = "za_cross_8"; way = { kh_vroom("На север", "za_street_17"); kh_vroom("На запад", "za_street_22"); kh_vroom("На восток", "za_street_16"); }; }; za_street_17 = za_street { nam = "za_street_17"; way = { kh_vroom("На юг", "za_cross_8"); kh_vroom("На север", "za_cross_9"); }; }; za_cross_9 = za_cross { nam = "za_cross_9"; way = { kh_vroom("На юг", "za_street_17"); kh_vroom("На север", "za_street_18"); kh_vroom("На запад", "za_street_19"); }; }; za_street_18 = za_street { nam = "za_street_18"; way = { kh_vroom("На юг", "za_cross_9"); kh_vroom("На север", "za_cross_2"); }; }; za_street_19 = za_street { nam = "za_street_19"; way = { kh_vroom("На запад", "za_cross_10"); kh_vroom("На восток", "za_cross_9"); }; }; za_cross_10 = za_cross { nam = "za_cross_10"; way = { kh_vroom("На юг", "za_street_21"); kh_vroom("На север", "za_street_20"); kh_vroom("На запад", "za_street_31"); kh_vroom("На восток", "za_street_19"); }; }; za_street_20 = za_street { nam = "za_street_20"; way = { kh_vroom("На юг", "za_cross_10"); kh_vroom("На север", "za_cross_1"); }; }; za_street_31 = za_street { nam = "za_street_31"; way = { kh_vroom("На запад", "za_alley_3"); kh_vroom("На восток", "za_cross_10"); }; }; za_alley_3 = za_alley { nam = "za_alley_3"; way = { kh_vroom("На восток", "za_street_31"); kh_vroom("На север", "za_deadend_1s"); }; }; za_deadend_1s = za_deadend{ nam = "za_deadend_1s"; way = { kh_vroom("На юг", "za_alley_3"); }; }; za_street_21 = za_street { nam = "za_street_21"; way = { kh_vroom("На юг", "za_cross_11"); kh_vroom("На север", "za_cross_10"); }; }; za_cross_11 = za_cross { nam = "za_cross_11"; way = { kh_vroom("На юг", "za_street_23"); kh_vroom("На север", "za_street_21"); kh_vroom("На запад", "za_street_36"); kh_vroom("На восток", "za_street_22"); }; }; za_street_22 = za_street { nam = "za_street_22"; way = { kh_vroom("На запад", "za_cross_11"); kh_vroom("На восток", "za_cross_8"); }; }; za_street_36 = za_street { nam = "za_street_36"; dsc = [[ Западным концом эта улица упирается в городскую стену. ]]; way = { kh_vroom("На восток", "za_cross_11"); }; }; za_street_46 = za_street { nam = "za_street_46"; dsc = [[ Западным концом эта улица упирается в городскую стену. ]]; way = { kh_vroom("На восток", "za_cross_12"); }; }; za_street_23 = za_street { nam = "za_street_23"; way = { kh_vroom("На юг", "za_cross_12"); kh_vroom("На север", "za_cross_11"); }; }; za_cross_12 = za_cross { nam = "za_cross_12"; way = { kh_vroom("На юг", "za_street_41"); kh_vroom("На север", "za_street_23"); kh_vroom("На запад", "za_street_46"); kh_vroom("На восток", "za_street_24"); }; }; za_street_24 = za_street { nam = "za_street_24"; way = { kh_vroom("На запад", "za_cross_12"); kh_vroom("На восток", "za_cross_13"); }; }; za_cross_13 = za_cross { nam = "za_cross_13"; way = { kh_vroom("На юг", "za_street_43"); kh_vroom("На запад", "za_street_24"); kh_vroom("На восток", "za_street_25"); }; }; za_street_25 = za_street { nam = "za_street_25"; way = { kh_vroom("На запад", "za_cross_13"); kh_vroom("На восток", "za_cross_14"); }; }; za_cross_14 = za_cross { nam = "za_cross_14"; way = { kh_vroom("На юг", "za_street_26"); kh_vroom("На север", "za_deadend_3s"); kh_vroom("На запад", "za_street_25"); }; }; za_deadend_3s = za_deadend { nam = "za_deadend_3s"; way = { kh_vroom("На юг", "za_cross_14"); }; }; za_street_26 = za_street { nam = "za_street_26"; way = { kh_vroom("На юг", "za_cross_15"); kh_vroom("На север", "za_cross_14"); }; }; za_cross_15 = za_cross { nam = "za_cross_15"; way = { kh_vroom("На юг", "za_street_35"); kh_vroom("На север", "za_street_26"); kh_vroom("На запад", "za_street_44"); kh_vroom("На восток", "za_street_27"); }; }; za_street_27 = za_street { nam = "za_street_27"; way = { kh_vroom("На запад", "za_cross_15"); kh_vroom("На восток", "za_prison_entrance"); }; }; za_prison_entrance = room { nam = "za_prison_entrance"; disp = "Нлейисланотр, у входа в тюрьму"; dsc = [[ Перед вами вход в большое металлическое здание. Похоже, оно гораздо старше остальных зданий в городе - на это указывают многочисленные следы коррозии на стенах и явно не раз восстановленная дверь. Именно сюда навьяры завели пленника. ]]; way = { kh_vroom("На запад", "za_street_27"); kh_vroom("На восток", "za_street_28"); }; }; za_deadend_2s = za_deadend { nam = "za_deadend_2s"; way = { kh_vroom("На юг", "za_prison_entrance"); }; }; za_street_28 = za_street { nam = "za_street_28"; way = { kh_vroom("На запад", "za_prison_entrance"); kh_vroom("На восток", "za_cross_16"); }; }; za_cross_16 = za_cross { nam = "za_cross_16"; way = { kh_vroom("На юг", "za_street_29"); kh_vroom("На запад", "za_street_28"); kh_vroom("На восток", "za_deadend_4"); }; }; za_deadend_4 = za_deadend { nam = "za_deadend_4"; way = { kh_vroom("На запад", "za_cross_16"); }; }; za_street_29 = za_street { nam = "za_street_29"; way = { kh_vroom("На юг", "za_street_30"); kh_vroom("На север", "za_cross_16"); }; }; za_street_30 = za_street { nam = "za_street_30"; way = { kh_vroom("На юг", "za_cross_17"); kh_vroom("На север", "za_street_29"); }; }; za_cross_17 = za_cross { nam = "za_cross_17"; dsc = [[ Вы находитесь посреди улицы где-то в Нлейисланотре. Улица на юге перегорожена отрядом навьярских воинов. ]]; way = { kh_vroom("На юг", function() pr [[ Мне с ними не справиться. ]]; return false; end); kh_vroom("На север", "za_street_30"); kh_vroom("На запад", "za_street_32"); kh_vroom("На восток", "za_deadend_5"); }; }; za_deadend_5 = za_deadend { nam = "za_deadend_5"; way = { kh_vroom("На запад", "za_cross_17"); }; }; za_street_32 = za_street { nam = "za_street_32"; way = { kh_vroom("На запад", "za_cross_18"); kh_vroom("На восток", "za_cross_17"); }; }; za_cross_18 = za_cross { nam = "za_cross_18"; dsc = [[ Вы находитесь посреди перекрестка рядом с тюрьмой Нлейисланотра. ]]; way = { kh_vroom("На юг", "za_deadend_6"); kh_vroom("На запад", "za_street_33"); kh_vroom("На восток", "za_street_32"); }; obj = { "za_prison_window"; }; }; za_prison_window = obj { var { state = 0; }; nam = "za_prison_window"; dsc = [[ Рядом с собой в стене здания вы видите небольшой зарешеченное {окошко}. ]]; act = function(s) if (s.state == 0) then if (za_convoy_gone) then return [[ В камере по ту сторону окна находится тот самый навьяр, которого вы видели в сопровождении конвоя. ]]; else return [[ Здесь нет ничего интересного. ]]; end; else return [[ Вам здесь больше нечего делать. ]]; end; end; used = function (s, o) if (o == item_toolbox) then walk("za_phaetlarr_free"); end; end; }; za_deadend_6 = za_deadend { nam = "za_deadend_6"; way = { kh_vroom("На север", "za_cross_18"); }; }; za_street_33 = za_street { nam = "za_street_33"; way = { kh_vroom("На запад", "za_cross_19"); kh_vroom("На восток", "za_cross_18"); }; }; za_cross_19 = za_cross { nam = "za_cross_19"; dsc = [[ Вы находитесь посреди улицы где-то в Нлейисланотре. Улица на юге перегорожена отрядом навьярских воинов. ]]; way = { kh_vroom("На юг", function() pr [[ Мне с ними не справиться. ]]; return false; end); kh_vroom("На север", "za_street_34"); kh_vroom("На запад", "za_street_37"); kh_vroom("На восток", "za_street_33"); }; }; za_street_34 = za_street { nam = "za_street_34"; way = { kh_vroom("На юг", "za_cross_19"); kh_vroom("На север", "za_street_35"); }; }; za_street_35 = za_street { nam = "za_street_35"; way = { kh_vroom("На юг", "za_street_34"); kh_vroom("На север", "za_cross_15"); }; }; za_street_37 = za_street { nam = "za_street_37"; way = { kh_vroom("На северо-запад", "za_street_38"); kh_vroom("На восток", "za_cross_19"); }; }; za_street_38 = za_street { nam = "za_street_38"; way = { kh_vroom("На север", "za_cross_20"); kh_vroom("На юго-восток", "za_street_37"); }; }; za_street_47 = za_street { nam = "za_street_47"; dsc = [[ Вы находитесь на углу двух улиц Нлейисланотра. ]]; way = { kh_vroom("На запад", "za_street_39"); kh_vroom("На юг", "za_street_38"); }; }; za_street_39 = za_street { nam = "za_street_39"; way = { kh_vroom("На запад", "za_cross_21"); kh_vroom("На восток", "za_street_47"); }; }; za_cross_21 = za_cross { nam = "za_cross_21"; dsc = [[ Вы находитесь посреди перекрестка где-то в Нлейисланотре. Улица на юге перегорожена отрядом навьярских воинов. ]]; way = { kh_vroom("На юг", function() pr [[ Мне с ними не справиться. ]]; return false; end); kh_vroom("На север", "za_street_40"); kh_vroom("На восток", "za_street_39"); }; }; za_street_40 = za_street { nam = "za_street_40"; way = { kh_vroom("На юг", "za_cross_21"); kh_vroom("На север", "za_cross_22"); }; }; za_cross_22 = za_cross { nam = "za_cross_22"; way = { kh_vroom("На юг", "za_street_40"); kh_vroom("На север", "za_street_41"); kh_vroom("На запад", "za_street_45"); kh_vroom("На восток", "za_street_42"); }; }; za_street_42 = za_street { nam = "za_street_42"; way = { kh_vroom("На запад", "za_cross_22"); kh_vroom("На восток", "za_cross_23"); }; }; za_cross_23 = za_cross { nam = "za_cross_23"; way = { kh_vroom("На север", "za_street_43"); kh_vroom("На запад", "za_street_42"); kh_vroom("На восток", "za_street_44"); }; }; za_street_41 = za_street { nam = "za_street_41"; way = { kh_vroom("На юг", "za_cross_22"); kh_vroom("На север", "za_cross_12"); }; }; za_street_43 = za_street { nam = "za_street_43"; way = { kh_vroom("На юг", "za_cross_23"); kh_vroom("На север", "za_cross_13"); }; }; za_street_44 = za_street { nam = "za_street_44"; way = { kh_vroom("На запад", "za_cross_23"); kh_vroom("На восток", "za_cross_15"); }; }; za_street_45 = za_street { nam = "za_street_45"; way = { kh_vroom("На запад", "za_alley_4"); kh_vroom("На восток", "za_cross_22"); }; }; za_alley_4 = za_alley { nam = "za_alley_4"; way = { kh_vroom("На восток", "za_street_45"); kh_vroom("На юг", "za_deadend_7"); }; }; za_deadend_7 = za_deadend { nam = "za_deadend_7"; way = { kh_vroom("На север", "za_alley_4"); }; }; za_phaetlarr_fight_intro = cutscene("za_phaetlarr_fight_intro_a", "Нлейисланотр, улица",[[Конвой замечает вас и переходит в атаку. Внезапно пленник выхватывает копье у одного из стражников и бросается в бой. ]], "za_plaetlarr_fight"); za_plaetlarr_victory = cutscene("za_phaetlarr_victory", "Нлейисланотр, улица", function(s) if (char_learr.follow) then return [[ Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" Глядя на Леарр он немного успокаивается и внимательно следит за ее словами: "Они что-хотели?" ]]; elseif (char_anna.follow) then return [[ Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Анны: "Он явно не расположен к нам. Но у нас мало выбора. Спроси его, знает ли он где храм"? ]]; elseif (char_wright.follow) then return [[ Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Джека: "Я думаю, пора возвращаться на корабль. Я надеюсь, он даст нам всю необходимую информацию". ]]; elseif (char_radcliffe.follow) then return [[ Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Уолтера: "Здесь слишком опасно оставаться. Надо доставить его на Левиафан и там решить, что делать дальше". ]]; else return [[ Вы побеждаете стражников. Фаэтларр с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" ]]; end; end, "za_phaetlarr_dlg"); za_plaetlarr_fight = battlefield { nam = "Нлейисланотр, улица"; plX = 4; plY = 1; map = { {2,0,0,0,0,0,2}; {2,0,0,0,0,0,2}; {2,1,1,0,0,0,2}; {2,0,0,0,1,1,2}; {2,0,0,0,0,0,2}; {2,0,0,0,0,0,2}; {2,0,0,0,0,0,2}; }; obstacle = "images/stones.png"; lose = "game_over_za_fight"; win = "za_plaetlarr_victory"; underwater = true; entered = function(s) if (char_learr.follow) then table.insert(s.obj, 2, za_cmbt_learr); s.plX = 3; elseif (char_anna.follow) then table.insert(s.obj, 2, za_cmbt_anna); s.plX = 3; elseif (char_wright.follow) then table.insert(s.obj, 2, za_cmbt_wright); s.plX = 3; elseif (char_radcliffe.follow) then table.insert(s.obj, 2, za_cmbt_radcliffe); s.plX = 3; end; end; obj = { 'za_cmbt_phaetlarr', 'za_cmbt_guard1', 'za_cmbt_guard2', 'za_cmbt_guard3', 'za_cmbt_guard4' }; }; za_cmbt_phaetlarr = combatant { nam = "za_cmbt_phaetlarr"; disp2 = "Фаэтларра"; disp3 = "Фаэтларру"; x = 4; y = 6; pic = "images/phaetlarr.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasSpear = true; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Фаэтларр ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; -- AI Order: -- If has spear and enemy is far - throw spear -- If has spear and enemy is close - hit with spear -- if spear is nearer than any enemy - walk towards spear -- walk towards nearest enemy -- If enemy close and enemy has spear - take spear from enemy -- If enemy close and enemy doesn't have spear - hit with claws if s.hasSpear then if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then --50% if (rnd(2) > 1) then enemy.hp = enemy.hp - 2; pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then --75% if (rnd(4) > 1) then enemy.hp = enemy.hp - 2; pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then --100% enemy.hp = enemy.hp - 2; pn("Фаэтларр бьет " .. enemy.disp2 .. " копьем и попадает. "); return; else local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y); if (rnd(4) > dist - 2) then s.hasSpear = false; enemy.hp = enemy.hp - 2; pn("Фаэтларр бросает копье в " .. enemy.disp2 .. " и попадает. "); else pn("Фаэтларр бросает копье в " .. enemy.disp2 .. ", но промахивается. "); end; return; end; else if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then if (enemy.hasSpear) then enemy.hasSpear = false; s.hasSpear = true; pn("Фаэтларр забирает копье у " .. enemy.disp2 .. ". "); else enemy.hp = enemy.hp - 1; pn("Фаэтларр бьет " .. enemy.disp2 .. " и попадает. "); end; end; end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Фаэтларр идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Фаэтларр} готов к бою. ]]; else return [[ {Фаэтларр} без сознания. ]]; end; end; }; za_cmbt_learr = combatant { nam = "za_cmbt_learr"; disp2 = "Леарр"; disp3 = "Леарр"; x = 5; y = 1; pic = "images/learr.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasSpear = true; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Леарр ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; for i = 1,#enemies do print(enemies[i].p.l); end; -- AI Order: -- If has spear and enemy is far - throw spear -- If has spear and enemy is close - hit with spear -- if spear is nearer than any enemy - walk towards spear -- walk towards nearest enemy -- If enemy close and enemy has spear - take spear from enemy -- If enemy close and enemy doesn't have spear - hit with claws if s.hasSpear then if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then --50% if (rnd(2) > 1) then enemy.hp = enemy.hp - 2; pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then --75% if (rnd(4) > 1) then enemy.hp = enemy.hp - 2; pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Леарр бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then --100% enemy.hp = enemy.hp - 2; pn("Леарр бьет " .. enemy.disp2 .. " копьем и попадает. "); return; end; else if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then enemy.hp = enemy.hp - 1; pn("Леарр бьет " .. enemy.disp2 .. " и попадает. "); return; end; end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Леарр идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Леарр} готова к бою. ]]; else return [[ {Леарр} без сознания. ]]; end; end; }; za_cmbt_wright = combatant { nam = "za_cmbt_wright"; disp2 = "Райта"; disp3 = "Райту"; x = 5; y = 1; pic = "images/jack.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasHarpoon = true; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Райт ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; if (s.x ~= 6 or s.y ~=3) then local ppath = here():getWalkDistance(s.x, s.y, 6, 3); if (ppath.l < path.l) then s.x = ppath.p[2][1]; s.y = ppath.p[2][2]; pn("Райт идет к укрытию"); end; end; -- AI Order: -- If has harpoon and enemy is far - shoot -- If has harpoon and enemy is close - hit with harpoon -- walk towards nearest enemy if (s.hasHarpoon) then if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then --50% if (rnd(2) > 1) then enemy.hp = enemy.hp - 2; pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. "); else pn("Райт бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then --75% if (rnd(4) > 1) then enemy.hp = enemy.hp - 2; pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. "); else pn("Райт бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then --100% enemy.hp = enemy.hp - 2; pn("Райт бьет " .. enemy.disp2 .. " гарпуном и попадает. "); return; else local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y); if (rnd(4) > dist - 2) then s.hasSpear = false; enemy.hp = enemy.hp - 2; pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном и попадает. "); else pn("Райт стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); end; return; end; else s.hasHarpoon = true; pn("Райт перезаряжает ружье. "); end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Райт идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Райт} готов к бою. ]]; else return [[ {Райт} без сознания. ]]; end; end; }; za_cmbt_radcliffe = combatant { nam = "za_cmbt_radcliffe"; disp2 = "Рэклиффа"; disp3 = "Рэдклиффу"; x = 5; y = 1; pic = "images/walter.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasHarpoon = true; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Рэдклифф ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; if (s.x ~= 6 or s.y ~=3) then local ppath = here():getWalkDistance(s.x, s.y, 6, 3); if (ppath.l < path.l) then s.x = ppath.p[2][1]; s.y = ppath.p[2][2]; pn("Рэдклифф идет к укрытию"); end; end; -- AI Order: -- If has harpoon and enemy is far - shoot -- If has harpoon and enemy is close - hit with harpoon -- walk towards nearest enemy if (s.hasHarpoon) then if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then --50% if (rnd(2) > 1) then enemy.hp = enemy.hp - 2; pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. "); else pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then --75% if (rnd(4) > 1) then enemy.hp = enemy.hp - 2; pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. "); else pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then --100% enemy.hp = enemy.hp - 2; pn("Рэдклифф бьет " .. enemy.disp2 .. " гарпуном и попадает. "); return; else local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y); if (rnd(4) > dist - 2) then s.hasSpear = false; enemy.hp = enemy.hp - 2; pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном и попадает. "); else pn("Рэдклифф стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); end; return; end; else s.hasHarpoon = true; pn("Рэдклифф перезаряжает ружье. "); end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Рэдклифф идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Рэдклифф} готов к бою. ]]; else return [[ {Рэдклифф} без сознания. ]]; end; end; }; za_cmbt_anna = combatant { nam = "za_cmbt_anna"; disp2 = "Анну"; disp3 = "Анне"; x = 5; y = 1; pic = "images/anna.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasHarpoon = true; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.enemy and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; if (#enemies == 0) then pn("Анна ждет. "); return; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1].o; local path = enemies[1].p; if (s.x ~= 6 or s.y ~=3) then local ppath = here():getWalkDistance(s.x, s.y, 6, 3); if (ppath.l < path.l) then s.x = ppath.p[2][1]; s.y = ppath.p[2][2]; pn("Анна идет к укрытию"); end; end; -- AI Order: -- If has harpoon and enemy is far - shoot -- If has harpoon and enemy is close - hit with harpoon -- walk towards nearest enemy if (s.hasHarpoon) then if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then --50% if (rnd(2) > 1) then enemy.hp = enemy.hp - 2; pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. "); else pn("Анна бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then --75% if (rnd(4) > 1) then enemy.hp = enemy.hp - 2; pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. "); else pn("Анна бьет " .. enemy.disp2 .. " гарпуном, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then --100% enemy.hp = enemy.hp - 2; pn("Анна бьет " .. enemy.disp2 .. " гарпуном и попадает. "); return; else local dist = math.sqrt((s.x - here().plX) * (s.x - here().plX) + (s.y - here().plY) * (s.y - here().plY));--here().getDistance(here().plX, here().plY, s.x, s.y); if (rnd(4) > dist - 2) then s.hasSpear = false; enemy.hp = enemy.hp - 2; pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном и попадает. "); else pn("Анна стреляет в " .. enemy.disp2 .. " гарпуном, но промахивается. "); end; return; end; else s.hasHarpoon = true; pn("Анна перезаряжает ружье. "); end; local plpath = here():getWalkDistance(s.x, s.y, pl.x, pl.y); if (plpath.l > 2) then s.x = plpath.p[2][1]; s.y = plpath.p[2][2]; pn("Анна идет к вам. "); end; end; dsc = function(s) if (s.hp > 0) then return [[ {Анна} готова к бою. ]]; else return [[ {Анна} без сознания. ]]; end; end; }; za_cmbt_guard = function(nam, index, x, y, spear) return combatant { nam = nam; disp2 = "стражника " .. tostring(index); disp3 = "стражника " .. tostring(index); x = x; y = y; hp = 6; pic = "images/navjiarr_guard".. index ..".png"; shootHit = "Вы стреляете в стражника и попадаете в него. "; shootMiss = "Вы стреляете в стражника, но не попадаете в него. "; shootKill = "Вы стреляете в стражника и он падает замертво. "; handHit = "Вы ударяете стражника. "; handKill = "После вашего удара стражник падает. "; handFar = "Слишком далеко. "; hasSpear = spear; enemy = true; dsc = function(s) if (s.hp > 0) then if (s.hasSpear) then return "{Стражник " .. tostring(index).. "} вооружен копьем готов к бою. "; else return "{Стражник " .. tostring(index).. "} готов к бою. "; end; else return false; end; end; make_turn = function(s) local enemies = { }; for item=1,#here().obj do local obj = here().obj[item]; if (obj.ally and obj.hp > 0) then local p = here():getWalkDistance(s.x, s.y, obj.x, obj.y); if (p) then table.insert(enemies, { o = obj, p = p }); end; end; end; table.sort(enemies, function(a, b) return (a.p.l < b.p.l); end); local enemy = enemies[1]; local path = here():getWalkDistance(s.x, s.y, here().plX, here().plY); if (not enemy or path and enemy.p.l > path.l ) then enemy = pl; else path = enemy.p; enemy = enemy.o; end; if (not enemy or not path) then pn("Стражник ".. tostring(index).. " ждет. "); return; end; -- AI Order: -- If has spear and enemy is close - hit with spear -- walk towards nearest enemy -- If enemy close - hit with claws if (s.hasSpear) then here():canShoot(s.x,s.y, enemy.x, enemy.y); if (math.abs(s.x - enemy.x) + math.abs(s.y - enemy.y) <= 2 and here():canShoot(s.x,s.y, enemy.x, enemy.y)) then if (math.abs(s.x - enemy.x) == 2 or math.abs(s.y - enemy.y) == 2) then --50% if (rnd(2) > 1) then enemy.hp = enemy.hp - 2; pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and math.abs(s.y - enemy.y) == 1) then --75% if (rnd(4) > 1) then enemy.hp = enemy.hp - 2; pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем и попадает. "); else pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем, но промахивается. "); end; return; elseif (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then --100% enemy.hp = enemy.hp - 2; pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " копьем и попадает. "); return; end; end; else if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then enemy.hp = enemy.hp - 1; pn("Стражник ".. tostring(index).. " бьет " .. enemy.disp2 .. " и попадает. "); return; end; end; print("fug2",path); s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Стражник ".. tostring(index).. " идет к " .. enemy.disp3 .. ". "); end; }; end; za_cmbt_guard1 = za_cmbt_guard("za_cmbt_guard1", 1, 3, 5, true); za_cmbt_guard2 = za_cmbt_guard("za_cmbt_guard2", 2, 5, 5, false); za_cmbt_guard3 = za_cmbt_guard("za_cmbt_guard3", 3, 3, 7, true); za_cmbt_guard4 = za_cmbt_guard("za_cmbt_guard4", 4, 5, 7, true); za_phaetlarr_dlg = dlg { var { state = 0; }; nam = "za_phaetlarr_dlg"; disp = "Фаэтларр"; entered = function(s) psub("intro"); if (char_learr.follow) then s.state = 1; return [[ Навьяр смотрит попеременно на Леарр и на вас, после чего отвечает: "Я Фаэтларр из Венаэданотра. Хевьяры обманули их и меня. Но как вы здесь оказались? Они закрыли хевьярам путь в город". Обращаясь к Леарр, он продолжает: "Ты осторожна будь. Хевьярам нельзя доверять". ]]; else return [[ Навьяр представляется: "Я Фаэтларр из Венаэданотра". После чего повторяет свой вопрос: "Что вы здесь хотите?" ]]; end; end; phr = { {tag="intro"}; {"[Цветокод] Венаэданотр неблизко. Как ты оказался здесь?", function(s) if (char_learr.follow) then return [[ Фаэтларр больше обращается к Леарр, чем к вам: "Другие хевьяры взяли меня на свой корабль. Пойдем со мной, сестра, вместе мы вернемся в Венаэданотр". Потом он гневно смотрит на вас: "Уходите, мы справимся сами". Видя, что Леарр не двигается, он застывает в удивлении. ]]; else return [[ "Другие хевьяры взяли меня на свой корабль. Больше я не повторю такой ошибки. Уходите, я справлюсь сам". ]]; end; end, code [[ if (char_learr.follow) then psub("on_my_own_learr"); else psub("on_my_own"); end; ]]}; {"[Цветокод] Мы ищем Лсэрианотр", function(s) if (char_learr.follow) then return [[ Фаэтларр больше обращается к Леарр, чем к вам: "Пойдем сестра. Эти такие же, как и те, с которыми был я. Вернемся в Венаэданотр". Потом он гневно смотрит на вас: "Уходите. Я не стану помогать вам". ]]; else return [[ "Вы заодно с ними. Уходите, я не стану помогать вам". ]]; end; end, code [[ psub("on_my_own"); ]]}; {tag="on_my_own"}; {"[Цветокод] Расскажи больше о них", [[ "Что вы хотите знать?" ]], code [[ psub("more_on_them"); ]]}; {"[Цветокод] Мы не враги тебе", [[ "Почему я должен вам верить?" ]], code [[ psub("trust");]]}; {tag="more_on_them", empty = code [[ pret(); ]]}; {"[Цветокод] Куда они направились?", [[ "Они идут в Лсэрианотр. Их цель - пробудить Наэтвьирра. Блэк хочет с его помощью стать правителем мира. Дрейк хотел найти древние знания. Но сейчас он мертв". ]], code [[ pon("black");pon("drake"); ]]}; {"[Цветокод] Сколько их было?", [[ "Хевьяров было пятеро. Но на борту также были навьяры. Нас было много. Большинство из них свято верят в Наэтвьирра, способного возродить старый мир. Хотя Уильям Дрейк не одобрял этого, Адриан Блэк всячески поощрял это". ]]}; {"[Цветокод] Почему они оставили тебя?", [[ "Мы должны были взять ключ. Я, Дрейк и Блэк. Местные были против, но у нас не было выбора - ключ нужен для открытия врат Лсэрианотра. Мы пробрались в храм без проблем. Потом начались проблемы. Когда я взял ключ, я оказался в ловушке. К сожалению, у них не было инструментов, чтобы вытащить меня. Тогда я отдал ключ Дрейку и они ушли за инструментами. Они не вернулись. А потом пришли местные. От них я узнал, что Дрейк был убит". ]], code [[ pon("drake"); ]]}; {tag="black", false, "[Цветокод] Теперь Блэк главный?", [[ "Да. У других хевьяров нет выбора, а навьяры на его корабле почти поклоняются ему". ]]}; {tag="drake", false, "[Цветокод] Что случилось с Дрейком?", [[ Фаэтларр долго молчал. Наконец он собрался с силами и ответил: "Его убили местные во время их отступления с ключем". ]], code [[ pon("i_am_drake"); ]]}; {tag="i_am_drake", false, "[Цветокод] Я Дэвид Дрэйк. Сын Уильяма", [[ Фаэтларр удивленно смотрит на вас: "Близких вьяров пути близки". ]], code [[ za_phaetlarr_dlg.state = za_phaetlarr_dlg.state + 1; poff("i_am_drake2"); ]]}; {tag="trust"}; {"[Цветокод] Мы хотим остановить Блэка", [[Фаэтларр Фаэтларр кажется сильно удивленным. Он долго молчит, обдумывая ваши слова. Наконец, навьяр кивает. ]], code [[ pon("need_help"); ]]}; {tag="need_help", false, "[Цветокод] Нам нужна твоя помощь", [[ Фаэтларр делает вам знак продолжать. ]], code [[ psub("not_sure"); ]]}; {tag="i_am_drake2", "[Цветокод] Я сын Уильяма Дрейка", [[ Фаэтларр удивленно смотрит на вас: "Близких вьяров пути близки". ]], code [[ za_phaetlarr_dlg.state = za_phaetlarr_dlg.state + 1; ]]}; {tag="not_sure"}; {"[Цветокод] Нам нужно знать, где находится храм Нлейисланотра", [[ Фаэтларр уверенно говорит: "Вы спасли меня. Я помогу в ответ. Но я прошу вас еще об одном. Я хочу на борт вашего корабля". ]], code [[ pon('join'); pon('go'); ]]}; {tag="join", false, "[Цветокод] Хорошо, мы согласны", code = [[ nleyyslanotrr_temple_found = true; walk("za_phaetlarr_final"); ]]}; {tag="go", false, "[Цветокод] Что, если мы откажемся?", [[ "Я не скажу вам где храм, и каждый идет своей дорогой". ]]}; }; }; za_char_phaetlarr = npc { nam = "za_char_phaetlarr"; dsc = [[ {Фаэтларр} стоит рядом и ждет ваших действий. ]]; phrases = { "Фаэтларр ждет ваших действий. " }; }; za_phaetlarr_final = cutscene("za_phaetlarr_final", "Левиафан, Кают-компания", [[ Вы возвращаетесь на Левиафан, где уже собрался весь экипаж. Фаэтларр рассказывает вам как попасть в храм ]], "leviathan_wardroom"); za_phaetlarr_free = cutscene("za_phaetlarr_free", "Нлейисланотр, улица", function(s) if (char_learr.follow) then return [[ При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" Глядя на Леарр он немного успокаивается и внимательно следит за ее словами: "Они что-хотели?" ]]; elseif (char_anna.follow) then return [[ При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Анны: "Он явно не расположен к нам. Но у нас мало выбора. Спроси его, знает ли он где храм"? ]]; elseif (char_wright.follow) then return [[ При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Джека: "Я думаю, пора возвращаться на корабль. Я надеюсь, он даст нам всю необходимую информацию". ]]; elseif (char_radcliffe.follow) then return [[ При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Уолтера: "Здесь слишком опасно оставаться. Надо доставить его на Левиафан и там решить, что делать дальше". ]]; else return [[ При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" ]]; end; end, za_phaetlarr_dlg);