# HG changeset patch # User Silverwing # Date 2018-11-25 18:58:42 # Node ID fd091a0ad8cd3f04db6e4c603e384a02d538d9d4 # Parent f33a4965f21b6d8d9dc064f3e535a6fc22546d39 nleyyslanotrr - entry(partial) diff --git a/atlantis_dyp.lua b/atlantis_dyp.lua --- a/atlantis_dyp.lua +++ b/atlantis_dyp.lua @@ -1194,11 +1194,11 @@ dyp_temple_navigation = dlg { dyp_temple_cave_entrance = room { nam = "dyp_temple_cave_entrance"; disp = "Храм Дипатреанотра, пещера"; - dsc = [[Вы стоите у выхода из глубокой пещеры, расположенной неподалеку от храма Дипатреанотра. Перед вами длинный коридор, ведущий куда-то вглубь скалы. Вдалеке, в коридоре вы видите слабое свечение. ]]; + dsc = [[Вы стоите у выхода из глубокой пещеры, расположенной неподалеку от храма Дипатреанотра. Перед вами длинный коридор, ведущий куда-то в глубь скалы. Вдалеке, в коридоре вы видите слабое свечение. ]]; underwater = true; way = { kh_vroom("Выйти из пещеры", "dyp_temple_east"); - kh_vroom("Вглубь пещеры", "preview_unavailable_dypatreanotrr"); + kh_vroom("В глубь пещеры", "dyp_temple_cave_deep"); }; }; @@ -1223,7 +1223,7 @@ dyp_temple_cave_main = room { "dyp_temple_cave_main_pedestal"; }; way = { - kh_vroom("К выходу", dyp_temple_cave_deep); + kh_vroom("К выходу", 'dyp_temple_cave_deep'); }; } diff --git a/atlantis_iyhehevjiarr.lua b/atlantis_iyhehevjiarr.lua --- a/atlantis_iyhehevjiarr.lua +++ b/atlantis_iyhehevjiarr.lua @@ -1223,8 +1223,8 @@ iyh_temple_answer_hall_plaque = obj { iyh_temple_descent_l = darkroom { nam = "Храм, спуск"; underwater = true; - dsc_halflit = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то вглубь земли, под храм. ]]; - dsc_dark = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то вглубь земли, под храм. В темноте вы ничего не видите. ]]; + dsc_halflit = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то в глубь земли, под храм. ]]; + dsc_dark = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то в глубь земли, под храм. В темноте вы ничего не видите. ]]; way = { kh_vroom("Вверх", "iyh_temple_left_hall", 2); kh_vroom("Вниз", "iyh_temple_under_corridor_1", 1); @@ -1235,8 +1235,8 @@ iyh_temple_descent_l = darkroom { iyh_temple_descent_r = darkroom { nam = "Храм, спуск"; underwater = true; - dsc_halflit = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то вглубь земли, под храм. ]]; - dsc_dark = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то вглубь земли, под храм. В темноте вы ничего не видите. ]]; + dsc_halflit = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то в глубь земли, под храм. ]]; + dsc_dark = [[Вы идете по длинной крутой лестнице, вырезанной в толще скалы. Она уходит куда-то в глубь земли, под храм. В темноте вы ничего не видите. ]]; way = { kh_vroom("Вверх", "iyh_temple_right_hall", 2); kh_vroom("Вниз", "iyh_temple_under_corridor_1", 1); diff --git a/game_over.lua b/game_over.lua --- a/game_over.lua +++ b/game_over.lua @@ -18,9 +18,11 @@ game_over_kraken = game_over("game_over_kraken", [[От сильных ударов корпус субмарины начал расходиться по швам. В помещения хлынула вода. Озверевший кракен продолжает хлестать Левиафан своими щупальцами. Наконец, чудовище хватает подлодку и отправляется вместе с ней в бездну. К этому времени на борту уже не осталось никого живого, кроме, быть может, навьяров. ]]); game_over_za_fight = game_over("game_over_za_fight", [[Стражники навьяров -- опасные противники. Очередной удар копья проделывает дыру в вашем скафандре и он наполняется водой. Вскоре вы задыхаетесь. ]]); -game_over_za_learr = game_over("game_over_za_learr", [[Леарр пытается оттолкнуть вас от штурвала и остановить Левиафан. Вы делаете резкий поворот и субмарина кренится на бок. Леарр, не удержавшись на ногах, падает. Навьярка кричит в бессильной ярости, когда вы пролетаете над воротами Нлейисланотра. Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Еще через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку -- отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет. ]]); +game_over_nley_learr = game_over("game_over_nley_learr", [[Леарр пытается оттолкнуть вас от штурвала и остановить Левиафан. Вы делаете резкий поворот и субмарина кренится на бок. Леарр, не удержавшись на ногах, падает. Навьярка кричит в бессильной ярости, когда вы пролетаете над воротами Нлейисланотра. Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Еще через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку -- отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет. ]]); -game_over_za_anna = game_over("game_over_za_learr", [[Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Вы слышите едва различимый среди шума двигателей голос Анны: "Это была плохая идея". Через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку -- отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет. ]]); +game_over_nley_anna = game_over("game_over_nley_anna", [[Вы берете курс к центру города, а вокруг вас начинают появляться целые отряды вооруженных навьяров. Восседая на белых акулах, всадники несутся наперерез Левиафану. Поначалу, копья отскакивают от металлической обшивки субмарины, не насося ей ущерба, а выстрелы из звуковой пушки выкашивают огромные прорехи в рядах противника. Однако, вскоре, несколько копий попадает в уязвимые места: на приборной панели загораются тревожные лампочки, сообщающие о поломках. Вы слышите едва различимый среди шума двигателей голос Анны: "Это была плохая идея". Через мгновение винт останавливается. Вы чувствуете запах дыма, заполняющий помещение. Вы пытаетесь использовать звуковую пушку, однако она не работает. Вы пытаетесь запустить торпеды, но мощный взрыв сотрясает подлодку -- отверстия торпедных аппаратов были заблокированы и торпеды взорвались находясь еще внутри Левиафана. Свет гаснет, а отсеки начинает заполнять вода. Вы наглухо задраиваете люк рубки, но вас это уже не спасет. ]]); + +game_over_nley_caught = game_over('game_over_nley_caught', [[Едва вы попадаете в поле зрения стражников Нлейисланотра, город оживает. Вы не успеваете понять, как оказываетесь окружены и схвачены. Поиски Лсэрианотра для вас закончены. ]]) game_over_eaten_by_octopus = game_over("game_over_eaten_by_octopus", [[Гигантский спрут мгновенно опутывает вас своими щупальцами. Вы не можете вырваться из стальной хватки чудовища. Металл скафандра скрипит, не выдерживая давления и вы понимаете, что ваши дни сочтены. ]]); diff --git a/journey_nleyyslanotrr.lua b/journey_nleyyslanotrr.lua --- a/journey_nleyyslanotrr.lua +++ b/journey_nleyyslanotrr.lua @@ -1,2006 +1,271 @@ -global { - za_convoy_gone = false; -}; +nley_intro = cutscene('Левиафан, рубка', 'Левиафан, рубка', [[Добраться до расположенного в глубоком ущелье Нлейисланотра непросто, но после долгих часов плутаний, вы наконец-то нашли дорогу к громадному навьярскому городу. При вашем приближении массивные каменные ворота города начинают закрываться. а в вашем направлении выдвигается вооруженный отряд, состоящий из сотни навьяров. ]], 'nley_intro_2'); -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; +nley_intro_2 = dlg { + nam = 'Левиафан, рубка'; + entered = [[Один навьяр отделяется от группы и подплывает к иллюминатору, так, что вы отчетливо видите полосы, бегущие по его планикам: "Уходите отсюда. Вам здесь не место". ]]; + phr = { + {'[Кодировщик Левиафана]Не препятствуйте нам, иначе дело закончится кровопролитием![Сделать выстрел из звуковой пушки по окрестным скалам]', [[Кажется, ваши действия напугали навьяров, однако посланец повторяет свое требование: "Уходите. Вам здесь не место. Мы будем сражаться до последнего навьяра, но не пропустим вас в город". ]] }; + {'[Кодировщик Левиафана]Нам нужно посетить ваш город. Мы не возьмем ничего ценного для вас. Мы можем предложить что-нибудь взамен. ', [[Посланец отвечает: "Нам ничего не нужно от хевьяров. Убирайтесь". ]]}; + {'[Полный вперед]', code = [[ if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then - psub("learr"); - return [[ - Как только Левиафан приближается к городу, массивные металлические ворота начинают закрываться. Огни на башнях окрашиваются красным, а по всему городу начинается какое-то волнение. В рубку поднимается Леарр. Она встает рядом с вами и, окидывая взглядом город, произносит: "Мы туда-не-идем. Они не-пускают-нас". - ]]; + walk("game_over_nley_learr"); 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"); + walk("game_over_nley_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"); - ]]}; + {'[Полный назад]', function(s) + walk('nley_intro_3') + end}; }; -}; - -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); +nley_intro_3 = dlg { + nam = 'Левиафан, кают-компания'; + entered = function(s) + pr [[Навьяры покидают вас, когда им становится очевидно, что вы не пытаетесь пробраться в город. ^^ Экипаж Левиафана собирается в кают-компании с целью обдумать и обсудить сложившуюся ситуацию. ]]; + if (ArrayUtils.indexOf(pl.party, 'learr') ~= 0) then + pr [[Леарр предлагает свое решение: "Я пойти-могу. Они не-в-связях-с-вами-меня-заподозрят". ]]; + if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then + pr [[Райт высказывает несогласие: "Они легко узнают, что ты не из их города и как ты ответить на вопрос об этом? Нам нужно другое решение"]]; + elseif (ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then + pr [[Уолтер качает головой: "Они тебя мигом раскусят, а что будет дальше -- сама понимаешь. Нет, тебя одну мы не отпустим". ^При слове "раскусят" Леарр заволновалась, так что Уолтер поспешно добавляет: "Раскусят -- раскроют, что ты с нами". ]]; end; end; end; -}; + phr = { + {'Мы дождемся ночи и отправимся в город своим ходом. Большая часть навьяров будет спать и мы сможем практически беспепятственно пробраться к центру. ', [[Немного посовещавшись, все приходят к выводу, что это наилучший вариант. ]], code [[walkin('leviathan_wardroom');]]}; + } +} + +nley_near_cliff_1 = room { + nam = 'Нлейисланотр, у скалы'; + dsc = [[Вы стоите в широком ущелье. К северу от вас возвышается на несколько сотен метров практически отвесная стена каменной породы. На востоке от вас расположен Нлейисланотр. ]]; + way = { + kh_vroom('В Левиафан', 'leviathan_airlock'); + kh_vroom('Отойти от скалы', 'nley_ravine'); + kh_vroom('На восток, вдоль скалы', 'nley_near_cliff_2'); + } +} -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", "Двери здания мгновенно раскрываются, впуская навьяров, после чего столь же быстро закрываются. "} -}; +nley_near_cliff_2 = room { + state = 0; + nam = 'Нлейисланотр, у скалы'; + dsc = [[Вы стоите в широком ущелье. К северу от вас возвышается на несколько сотен метров практически отвесная стена каменной породы. На востоке от вас расположен Нлейисланотр. ]]; + way = { + kh_vroom('На запад, вдоль скалы', 'nley_near_cliff_1'); + kh_vroom('На восток, вдоль скалы', 'nley_near_cliff_3'); + kh_vroom('Отойти от скалы', function(s) + if nley_near_cliff_2.state == 0 then + nley_near_cliff_2.state = 1; + pr [[Вас там легко заметят. ]]; + return false; + else + return 'game_over_nley_caught'; + end; + end); + } +} -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); +nley_near_cliff_3 = room { + state = 0; + nam = 'Нлейисланотр, у скалы'; + dsc = [[Вы стоите в широком ущелье. К северу от вас возвышается на несколько сотен метров практически отвесная стена каменной породы. На востоке от вас расположен Нлейисланотр. ]]; + way = { + kh_vroom('На запад, вдоль скалы', 'nley_near_cliff_2'); + kh_vroom('На восток, вдоль скалы', 'nley_near_cliff_4'); + kh_vroom('Отойти от скалы', function(s) + if nley_near_cliff_3.state == 0 then + nley_near_cliff_3.state = 1; + pr [[Вас там легко заметят. ]]; + return false; + else + return 'game_over_nley_caught'; + end; + 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"; +nley_near_cliff_4 = room { + state = 0; + stat2 = 0; + nam = 'Нлейисланотр, у скалы'; + dsc = [[Вы стоите в широком ущелье. К северу от вас возвышается на несколько сотен метров практически отвесная стена каменной породы. На востоке от вас расположен Нлейисланотр. ]]; 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"); - }; -}; + kh_vroom('На запад, вдоль скалы', 'nley_near_cliff_2'); + kh_vroom('На восток, вдоль скалы', function(s) + if nley_near_cliff_4.state2 == 0 then + nley_near_cliff_4.state2 = 1; + pr [[Вас там легко заметят. ]]; + return false; + else + return 'game_over_nley_caught'; + end; + end); + kh_vroom('Отойти от скалы', function(s) + if nley_near_cliff_4.state == 0 then + nley_near_cliff_4.state = 1; + pr [[Вас там легко заметят. ]]; + return false; + else + return 'game_over_nley_caught'; + end; + end); + } +} -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"; +nley_ravine = room { + state = 0; + nam = 'Нлейисланотр, ущелье'; + dsc = [[Широкое ущелье ведет прямо к воротам Нлейисланотра. Окруженный высокими скалами со всех сторон, навьярский город хорошо защищен. ]]; way = { - kh_vroom("На запад", "za_cross_1"); - kh_vroom("На восток", "za_cross_2"); - }; -}; + kh_vroom('На восток, к городу', function(s) + if nley_ravine.state == 0 then + nley_ravine.state = 1; + pr [[Вас там легко заметят. ]]; + return false; + else + return 'game_over_nley_caught'; + end; + end); + kh_vroom('На север, к скале', 'nley_near_cliff_1'); + kh_vroom('На юг, к скале', 'nley_near_cliff_5'); + } +} -za_cross_2 = za_cross { - nam = "za_cross_2"; +nley_near_cliff_5 = room { + nam = 'Нлейисланотр, у скалы'; + dsc = [[Вы стоите в широком ущелье. К югу от вас возвышается на несколько сотен метров практически отвесная стена каменной породы. На востоке от вас расположен Нлейисланотр. ]]; way = { - kh_vroom("На юг", "za_street_18"); - kh_vroom("На север", "za_street_5"); - kh_vroom("На запад", "za_street_4"); - kh_vroom("На восток", "za_street_6"); - }; -}; + kh_vroom('Отойти от скалы', 'nley_ravine'); + kh_vroom('На восток, вдоль скалы', 'nley_near_cliff_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"); +nley_near_cliff_6 = room { + var { + distraction = false; }; -}; - -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"; + state = 0; + nam = 'Нлейисланотр, у скалы'; + dsc = [[Вы стоите в широком ущелье. К югу от вас возвышается на несколько сотен метров практически отвесная стена каменной породы. На востоке от вас расположен Нлейисланотр. ]]; 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; + kh_vroom('Отойти от скалы', function(s) + if nley_near_cliff_6.state == 0 then + nley_near_cliff_6.state = 1; + pr [[Вас там легко заметят. ]]; + return false; + else + return 'game_over_nley_caught'; + end; + end); + kh_vroom('На восток, вдоль скалы', function(s) + if nley_near_cliff_6.state == 0 then + nley_near_cliff_6.state = 1; + pr [[Вас там легко заметят. ]]; + return false; + else + if nley_near_cliff_6.distraction then + return 'nley_near_cliff_7'; + else + return 'game_over_nley_caught'; + end; + end; 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"; +nley_near_cliff_7 = room { + state = 0; + state2 = 0; + nam = 'Нлейисланотр, у скалы'; + dsc = [[Вы стоите в широком ущелье. К югу от вас возвышается на несколько сотен метров практически отвесная стена каменной породы. На востоке от вас расположен Нлейисланотр. В скале имеется глубокая трещина, ведущая в глубокую пещеру. ]]; 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"); - }; -}; + kh_vroom('Отойти от скалы', function(s) + if nley_near_cliff_7.state == 0 then + nley_near_cliff_7.state = 1; + pr [[Вас там легко заметят. ]]; + return false; + else + return 'game_over_nley_caught'; + end; + end); + kh_vroom('На запад, вдоль скалы', 'nley_near_cliff_6'); + kh_vroom('На восток, вдоль скалы', function(s) + if nley_near_cliff_7.state2 == 0 then + nley_near_cliff_7.state2 = 1; + pr [[Вас там легко заметят. ]]; + return false; + else + return 'game_over_nley_caught'; + end; + end); + kh_vroom('В пещеру', 'nley_cave_entrance'); + } +} -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 { +nley_cave_entrance = darkroom { 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 [[ {Леарр} без сознания. ]]; + nam = 'Нлейисланотр, пещера'; + enter = function(s) + if s.state == 0 then + s.state = 1; + walkin(nley_phaetlarr_intro_dlg); end; end; -}; + dsc_halflit = [[Небольшой проход ведет в глубокую пещеру, ведущую далеко в недра скалы. Луч прожектора, установленного в вашем скафандре позволяет ориентироваться в темных катакомбах. ]]; + dsc_dark = [[Небольшой проход ведет в глубокую пещеру, ведущую далеко в недра скалы. В темноте забытой каверны вы с трудом различаете очертания стен. ]]; + obj = { + 'nley_char_phaetlarr_cave'; + }; + way = { + kh_vroom('Выйти из пещеры', 'nley_near_cliff_7', 'Выйти из пещеры', 2); + kh_vroom('В глубь пещеры', 'nley_cave_1', 'В глубь пещеры', 1); + }; +} -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; -}; +nley_char_phaetlarr_cave = npc { + nam = 'nley_char_phaetlarr_cave'; + dsc = [[У стены стоит {навьяр}. Он выглядит очень утомленным и исхудалым. В одной руке он держит светящийся мягким светом камень, в другой - коралловое копье. ]]; + dlg = 'nley_phaetlarr_dlg'; +} -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; -}; +nley_phaetlarr_intro_dlg = dlg { + nam = 'Нлейисланотр, пещера'; + entered = [[В темноте пещеры вы с трудом различаете очертания предметов. Неожиданно, перед вами возникает фигура навьяра, держащего в руке небольшой светящийся камень. По его плавникам бегут цветные полосы: "Я наконец-то дождался вас. Вы вернулись за мной?"]]; + phr = { + {'[Кодировщик]Вернулись?', [[Вы плохо видите лицо навьяра, но кажется, ваши слова удивили его. Цветные полосы на его плавниках гласят: "Кто вы?"]], code [[psub('who_are_we');]] }; + {tag='who_are_we'}; + {'[Кодировщик]Мы ищем Уильяма Дрейка и Адриана Блэка.', [[Навьяр кажется растерянным. По его плавникам бегут цветные полосы: "Возможно, я смогу вам помочь, если вы возьмете меня с собой". ]], code [[ psub('accept_phaetlarr'); ]]}; + {tag='accept_phaetlarr'}; + {'[Кодировщик]Хорошо, мы продолжим путешествие вместе.', code [[ + walk('nley_phaetlarr_dlg_join'); + ]]}; + {'[Кодировщик]Мне нужно подумать.', [[Навьяр отходит в сторону, пропуская вас. По его плавникам бегут цветные полосы: "Я расскажу вам, что знаю и помогу найти карту, если вы примете мое предложение". ]], code [[walk('nley_cave_entrance');]]}; + }; +} -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; +nley_phaetlarr_dlg = dlg { + nam = 'Нлейисланотр, пещера'; + entered = [[Навьяр не двигается, по его головным плавникам бегут цветные полосы: "Вы решили принять мои условия?"]]; + phr = { + {'[Кодировщик]Да, нам потребуется твоя помощь.', code [[ + walk('nley_phaetlarr_dlg_join'); + ]]}; + {'[Кодировщик]Думаю, я справлюсь один.', [[Навьяр остается неподвижен. ]], code [[walk('nley_cave_entrance');]]}; }; -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; +nley_phaetlarr_dlg_join = dlg { + nam = 'Фаэтларр'; + entered = [[Навьяр начинает рассказывать: "Мое имя -- Фаэтларр. Я родом из Венаэданотра, где и примкнул к экспедиции Уильяма Дрейка. Мы прибыли сюда около двух недель назад. Уильям рассказывал, что его корабль может идти со скоростью гораздо большей, но, поскольку многие навьяры решили отправиться с ним, не исключая и меня, он двагился с нашей скоростью. Другой руководитель, Адриан Блэк, уговаривал нас дождаться их возвращения как раз из-за этого, но большинство из нас, при поддержке Уильяма Дрейка, решило отправиться вместе с хевьярами. ^Здесь, в Нлейисланотре нас приняли хорошо, однако местные правители строжайше запретили нам посещать их храм, где хранилась искомая Уильямом Дрейком карта. ^Мы проникли в храм тихо. Все, казалось, шло хорошо, однако когда мы вышли из храма, нас встретила армия Нлейисланотра. Корабль Уильяма Дрейка нещадно расстреливал врагов, прикрывая наш отход и, наверное, почти всем удалось выбраться. Мне и еще нескольким навьярам не повезло. Мы оказались отрезаны от Надежды и погребены под обрушившимися скалами. Я единственный смог выбраться. Догнать Надежду не представлялось возможным и я направился к Нлейисланотру, в стремлении найти там укрытие и набраться сил на обратный путь домой. И вот, я встретил вас, идущих по следу Уильяма Дрейка". ]]; 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, "[Цветокод] Что, если мы откажемся?", [[ - "Я не скажу вам где храм, и каждый идет своей дорогой". + {'[Кодировщик]Мы ищем карту пути в Лсэрианотр.', [[Фаэтларр отвечает: "Телхиарр говорил что-то о том, что карта осталась в Нлейисланотре. Думаю он сможет нам помочь". ]], code [[ + remove(nley_char_phaetlarr_cave, nley_cave_entrance); + table.insert(pl.party, 'phaetlarr'); + char_phaetlarr:accompany(true); + walk('nley_cave_entrance'); ]]}; }; -}; - -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); \ No newline at end of file +} \ No newline at end of file diff --git a/journey_nleyyslanotrr.lua b/journey_nleyyslanotrr_old.lua copy from journey_nleyyslanotrr.lua copy to journey_nleyyslanotrr_old.lua diff --git a/journey_nleyyslanotrr_temple.lua b/journey_nleyyslanotrr_temple_old.lua rename from journey_nleyyslanotrr_temple.lua rename to journey_nleyyslanotrr_temple_old.lua diff --git a/journey_venaedanotrr.lua b/journey_venaedanotrr.lua --- a/journey_venaedanotrr.lua +++ b/journey_venaedanotrr.lua @@ -1289,8 +1289,8 @@ ven_char_phanearr_dlg = dlg { pon("ray_box"); ]]}; {tag="ray_box", false, "[Кодировщик]Как мне найти коробочку лучей?", [[Фанеарр дает вам маленький металлический кубик. На его гранях высечены глубокие бороздки, предназначения которых вы не понимаете. Навьяр сообщает вам: "Мы были почти у цели. Если бы не ирфирр, мы открыли бы вход". ]], code [[ - ven_box_of_light_known; - take(ven_item_key); + ven_box_of_light_known = true; + take('ven_item_key'); ]]}; {always=true, "[Кодировщик]Я пойду.", [[Фанееарр отвечает: "Ты возвращайся". ]], code [[ back(); diff --git a/journey_venaedanotrr_labyrinth.lua b/journey_venaedanotrr_labyrinth.lua --- a/journey_venaedanotrr_labyrinth.lua +++ b/journey_venaedanotrr_labyrinth.lua @@ -876,7 +876,7 @@ ven_cache = obj { if (o == ven_item_tablet) then s.state = 1; remove(ven_item_tablet, pl); - return "Пластинка легко уходит вглубь прорези. Вы слышите щелчок и в стене открывается выемка, в которой лежит ключ. "; + return "Пластинка легко уходит в глубь прорези. Вы слышите щелчок и в стене открывается выемка, в которой лежит ключ. "; end; end; end; diff --git a/main.lua b/main.lua --- a/main.lua +++ b/main.lua @@ -43,7 +43,6 @@ dofile "atlantis_iyhehevjiarr.lua" dofile "journey_venaedanotrr.lua" dofile "journey_venaedanotrr_labyrinth.lua" dofile "journey_nleyyslanotrr.lua" -dofile "journey_nleyyslanotrr_temple.lua" dofile "journey_temple.lua" -- Часть 4: Пробуждение. Эпилог dofile "lseryanotrr_intro.lua" diff --git a/startup.lua b/startup.lua --- a/startup.lua +++ b/startup.lua @@ -177,14 +177,13 @@ function init() ---game init pl.where = intro; ---debug - pl.where = "ven_temple_entrance"; + nley_cave_entrance.state = 1; + pl.where = "nley_phaetlarr_dlg_join"; move("submarine_leviathan", "ven_temple_entrance"); take(ven_item_green_key); take(ven_item_red_key); take(ven_item_tablet); - - pl.where = "ven_temple_labyrinth_l1"; ven_temple_labyrinth_l1.position = '17'; -- leviathan