# HG changeset patch # User Silverwing # Date 2017-10-01 08:50:16 # Node ID 9642e5f9b3b7e98792e09a988ba1fb00186da7d4 # Parent fa038fa9b89f75e344e2e7eb9e06d0661c152436 Changes diff --git a/engineering.lua b/engineering.lua deleted file mode 100644 --- a/engineering.lua +++ /dev/null @@ -1,123 +0,0 @@ -first_city_engineering_door = obj { - nam = "first_city_engineering_door"; - dsc = function(s) - if (first_city_engineering.open) then - return [[]]; - else - return [[{Двери}, ведущие в зал обслуживания заблокированы. ]]; - end; - end; -}; - -first_city_engineering_door_inside = obj { - nam = "first_city_engineering_door_inside"; -}; - -first_city_engineering = room { - nam = "first_city_engineering"; - disp = "Лсэрианотр, зал обслуживания"; - dsc = [[ - Вы находитесь в одном из залов обслуживания Лсэрианотра. Двери в помещение заблокированы и разблокировать их не представляется возможным. - ]]; - entered = function(s) - service_tunnels.position = "24"; - end; - obj = { - "first_city_door_control", - "first_city_door_control_cardreader", - "item_keys" - }; - way = { - kh_vroom("В сервиcный тоннель", "service_tunnels"); - }; -}; - -item_keys = obj { - nam = "item_keys"; - disp = "Ключи"; - dsc = "На столе лежат несколько {металлических пластин}. "; - act = function(s) - take(item_middle_rim_key); - take(item_airlock_key); - take(item_engineering_key); - take(item_blank_key); - disable(s); - return "Вы берете пластины себе"; - end; -}; - ---TODO (публичная демо-версия) сделать картинки ключей ---TODO (приватная демо-версия) сделать случайную генерацию ключей - -item_airlock_key = obj { - nam = "item_airlock_key"; - disp = "Ключ-карта"; - inv = [[Небольшая металлическая пластина около 6 см в ширину и 10 см в длину. На ней нет никаких символов, кроме трех цилиндров заключенных в квадрат. ]]; -}; - -item_middle_rim_key = obj { - nam = "item_middle_rim_key"; - disp = "Ключ-карта с отверстиями"; - inv = [[Небольшая металлическая пластина около 3 см в ширину и 10 см в длину, на ней в ряд через равные промежутки присутствуют отверстия или нарисованные круги: круг, отверстие, круг, отверстие, круг, отверстие, отверстие, круг ]]; -- 01010110 = 172 -}; - -item_engineering_key = obj { - nam = "item_engineering_key"; - disp = "Ключ-карта с отверстиями"; - inv = [[Небольшая металлическая пластина около 3 см в ширину и 10 см в длину, на ней в ряд через равные промежутки присутствуют отверстия или нарисованные круги: круг, отверстие, круг, круг, отверстие, круг, круг, круг ]]; -- 01001000 = 144 -}; - -item_blank_key = obj { - nam = "item_blank_key"; - disp = "Ключ-карта без отверстий"; - inv = [[Небольшая металлическая пластина около 3 см в ширину и 10 см в длину с восемью кругами, нарисованными на ней в ряд ]]; -- 00000000 = 0 -}; - -first_city_door_control_cardreader = obj { - nam = "first_city_door_control_cardreader"; - state = 0; - dsc = function(s) - if (s.state == 0 or s.state == 2) then - return "В терминале вы видите небольшую {щель}, около 3 сантиметров шириной."; - else - return "В терминале вы видите небольшую {щель}, около 3 сантиметров шириной. В ней застряла одна из ключ-карт"; - end; - end; - act = function(s) - if (s.state == 0 or s.state == 2) then - return "Очевидно, сюда что-то вставляется. "; - else - return "Ключ-карта застряла. Вы не сможете вытащить ее руками. "; - end; - end; - used = function(s, o) - if (s.state == 0) then - if (o == item_middle_rim_key) then - s.state = s.state + 1; - remove(item_middle_rim_key, pl); - first_city_middle_south.open(first_city_middle_south); - return "Аппарат начинает считывать карту. Вы слышите громкий щелчок. Вы слышите откуда-то издалека звук открывающихся огромных ворот. Карта остается в разъеме. "; - elseif (o == item_engineering_key) then - s.state = s.state + 1; - remove(item_engineering_key, pl); - return "Аппарат начинает считывать карту. Вы слышите громкий щелчок. Двери в комнату слегка приоткрываются. После чего с громким стуком захлопываются. Карта остается в разъеме. "; - elseif (o == item_blank_key) then - s.state = s.state + 1; - remove(item_blank_key, pl); - return "Аппарат начинает считывать карту. Вы слышите громкий щелчок. Карта остается в разъеме. "; - else - return "Это сюда не подойдет"; - end; - elseif (s.state == 1 and o == item_umbrella) then - s.state = 0; - return "Острым наконечником зонта вы поддеваете ключ и вытягиваете его из разъема. К сожалению, он более непригоден к использованию - вы видите, что он погнут"; - else - return "Прежде чем вставлять что-то еще, нужно извлечь ключ. "; - end; - end; -}; - -first_city_door_control = obj { - nam = "first_city_door_control"; - dsc = "Возле одной из стен стоит терминал."; -}; \ No newline at end of file diff --git a/final_battle.lua b/final_battle.lua deleted file mode 100644 --- a/final_battle.lua +++ /dev/null @@ -1,692 +0,0 @@ -fb_naethvjirr = obj { - nam = "fb_naethvjirr"; - disp2 = "Наэтвьирра"; - position = 4; - throw = 0; -- оставшиеся ходы до возможности применения (раз в 4 хода) - charge = 0; -- оставшиеся ходы до возможности применения (раз в 3 хода) - shield = true; -- активность щита - shieldRecharge = false; -- О, как я люблю эти маленькие костыли. Это нужно, чтобы щит не восстанавливался сразу после выстрела - canshoot = function(s) - return not s.shield; - end; - canhit = function(s) - return not s.shield; - end; - nohitmsg = "Это бессмысленно, пока он закрыт щитом"; - noshootmsg = "Это бессмысленно, пока он закрыт щитом"; - hitpoints = 3; - passturn = function(s) - if (s.hitpoints > 0) then - local gens = 0; - for i = 0, #final_battle.generators do - if (final_battle.generators[i] == 4) then - gens = gens + 1; - s.charge = s.charge - 1; - elseif (final_battle.generators[i] == 3) then - gens = gens + 1; - s.throw = s.throw - 1; - elseif (final_battle.generators[i] == 2) then - gens = gens + 1; - if (not s.shield) then - if (s.shieldRecharge) then - s.shield = true; - s.shieldRecharge = false; - p("Щит вокруг Наэтвьирра восстановлен и он снова защищен от ваших атак. "); - else - s.shieldRecharge = true; - end; - end; - end; - end; - - if (gens == 0) then - p("Глаза Наэтвьирра гаснут, и конструкт бессильно падает на пол. "); - s.hitpoints = 0; - return true; - end; - - if (s.charge <= 0) then - -- Пускаем разряд в игрока - s.charge = 3; - p("Наэтвьирр отправляет в вас электрический разряд. Вы не можете пошевелиться. "); - if (rnd(4) < 2) then - -- Отбросить игрока в сторону - p("Разряд отбрасывает вас в сторону. "); - fb_throwAway(pl); - end; - - if (rnd(4) < 2) then -- 25% - p("Вы чувствуете, что атака не прошла для вас бесследно. "); - pl.hitpoints = pl.hitpoints - 1; - if (pl.hitpoints <= 0) then - walk(game_over_naethvjirr); - return; - end; - end; - - final_battle.passturn(final_battle); - p("Вы оправились от атаки Наэтвьирра и снова можете действовать. "); - elseif (s.throw <= 0) then - -- Отбрасываем игрока - s.throw = 4; - fb_throwAway(pl); - p("Наэтвьирр отправляет в вас мощную волну воздуха, которая отбрасывает вас в сторону. "); - - if (rnd(4) > 1) then -- 75% - pl.hitpoints = pl.hitpoints - 1; - p("Вы чувствуете, что атака не прошла для вас бесследно. "); - if (pl.hitpoints <= 0) then - walk(game_over_naethvjirr); - return; - end; - end; - end; - end; - end; - onhit = function(s) - local result = ""; - - s.hitpoints = s.hitpoints - 1; - if (s.hitpoints == 2) then - result = "Сильный удар повреждает Наэтвьирра, но вы не замечаете, сказалось ли это на его работоспособности. "; - elseif (s.hitpoints == 1) then - result = "Наэтвьирр пошатнулся от вашего удара, давая понять, что попадание не прошло бесследно. "; - elseif (s.hitpoints == 0) then - result = "После вашего удара глаза Наэтвьирра гаснут и конструкт с грохотом падает рядом со своим троном. "; - end; - p(result); - final_battle.passturn(final_battle); - end; - onshoot = function(s) - local hit = false; - if (pl.position[1] == 1 and pl.position[2] == 1) then - hit = (rnd(4) > 1); - else - hit = (rnd(2) > 1); - end; - - local result = ""; - if (hit) then - s.hitpoints = s.hitpoints - 1; - if (s.hitpoints == 2) then - result = "Ваш выстрел повреждает Наэтвьирра, но вы не замечаете, сказалось ли это на его работоспособности. "; - elseif (s.hitpoints == 1) then - result = "Глаза Наэтвьирра на мгновение моргают, давая понять, что попадание не прошло бесследно. "; - elseif (s.hitpoints == 0) then - result = "Глаза Наэтвьирра гаснут и конструкт с грохотом падает рядом со своим троном. "; - end; - else - result = "Пуля пролетает мимо конструкта, не причинив ему никакого вреда. "; - end; - pn(result); - final_battle.passturn(final_battle); - end; - dsc = function(s) - if (s.hitpoints > 0) then - local shield = ""; - if (s.shield) then - shield = "Вокруг него едва заметно силовое поле, защищающее его от физических повреждений. "; - end; - return "В центре зала перед массивной конструкцией, напоминающей трон, стоит {навьяр}. Конструкт выглядит совершенно как живой, сияющие красноватым светом глаза внимательно следят за вашими действиями. ".. shield .."^"; - else - --return "В центре зала рядом с массивной конструкцией, напоминающей трон, лежит сильно поврежденный {навьяр-конструкт}. ^"; - return ""; - end; - end; -}; - -fb_black = obj { - nam = "fb_black"; - position = 4; - bullets = 6; -- потребуется перезарядка, если потратит все 6 патронов. Скорее всего до этого никогда не дойдет, но предусмотреть стоит - hitpoints = 1; - disp2 = "Блэка"; - canshoot = function(s) - if (pl.position[1] == 1 and pl.position[2] == 1) then - return true; - else - return false; - end; - end; - noshootmsg = "Вы не попадете в него. "; - nohitmsg = "Для этого до него еще надо добраться. "; - dsc = function(s) - if (s.hitpoints > 0) then - return "{Адриан Блэк} укрылся от вас за троном. ^"; - end; - end; - onshoot = function(s) - if (rnd(2) > 1) then--50% - s.hitpoints = 0; - p("Вы раните Блэка в плечо, он роняет пистолет и скрывается за троном. Более он не опасен. "); - else - p("Ваша пуля пролетает мимо, не причинив Блэку никакого вреда. "); - end; - final_battle.passturn(final_battle); - end; - passturn = function(s) - if (s.hitpoints > 0) then - if (s.bullets > 0) then - if (pl.position[1] == 1 and pl.position[2] == 1) then - -- Стреляем в игрока - p("Блэк стреляет в вас. "); - if (rnd(4) > 1) then--75% - pl.hitpoints = pl.hitpoints - 1; - if (pl.hitpoints > 0) then - p("Пуля лишь слегка задевает вас, практически не нанеся урона. "); - else - walk(game_over_shot_fb); - end; - end; - end; - else - -- Перезаряжаем - s.bullets = 6; - p("Адриан Блэк перезаряжает револьвер. "); - end; - end; - end; -}; - -fb_pylons = obj { - nam = "fb_pylons"; - position = "с"; - state = 2;--Количество активных пилонов - charging = 0; - canhit = true; - noshootmsg = "Вы не попадете в них"; - onhit = function(s) - if (s.state > 0) then - if (pl.position[1] == 1 and pl.position[2] == 1) then - s.state = s.state - 1; - if (s.state == 0) then - -- Если оба пилона уничтожены, нет смысла передавать им энергию. - for i = 0, #final_battle.generators do - if (final_battle.generators[i] == 5) then - final_battle.generators[i] = 1; - end; - end; - end; - p("Ударом по металлическому стержню, вы выводите из строя один из пилонов"); - final_battle.passturn(final_battle); - else - return "Пилоны слишком далеко от вас"; - end; - else - return "Оба пилона уже выведены из строя"; - end; - end; - passturn = function(s) - for i = 1, #final_battle.generators do - if (final_battle.generators[i] == 5) then - s.charging = s.charging + 1; - end; - end; - if (s.charging >= 10) then - pl.hitpoints = 0; - walk(game_over_pylon); - end; - end; - dsc = function(s) - if (s.state == 2) then - return "В центральной части комнаты расположены два {пилона} высотой около метра. На вершине их установлены сверкающие металлические стержни.^"; - elseif (s.state == 1) then - return "В центральной части комнаты расположены два {пилона} высотой около метра. На вершине одного из пилонов установлен сверкающий металлический стержень. Стержень на втором пилоне сильно погнут и выведен из строя.^"; - elseif (s.state == 0) then - return "В центральной части комнаты расположены два пилона высотой около метра. Металлические стержни, установленные в их вершине сильно повреждены.^"; - end; - end; -}; - -fb_throwAway = function(target) - local positions = {}; - if (target.position[1] - 1 >= 0) then - if (target.position[2] - 1 >= 0) then - positions[#positions + 1] = {target.position[1] - 1, target.position[2] - 1}; - end; - positions[#positions + 1] = {target.position[1] - 1, target.position[2]}; - if (target.position[2] + 1 <= 2) then - positions[#positions + 1] = {target.position[1] - 1, target.position[2] + 1}; - end; - end; - - if (target.position[2] - 1 >= 0) then - positions[#positions + 1] = {target.position[1], target.position[2] - 1}; - end; - if (target.position[2] + 1 <= 2) then - positions[#positions + 1] = {target.position[1], target.position[2] + 1}; - end; - - if (target.position[1] + 1 <= 2) then - if (target.position[2] - 1 >= 0) then - positions[#positions + 1] = {target.position[1] + 1, target.position[2] - 1}; - end; - positions[#positions + 1] = {target.position[1] + 1, target.position[2]}; - if (target.position[2] + 1 <= 2) then - positions[#positions + 1] = {target.position[1] + 1, target.position[2] + 1}; - end; - end; - - target.position = positions[rnd(#positions)]; -end; - -fb_getGeneratorIcon = function(value) - if (value == 0) then - return "images/fb_inactive.png"; - elseif (value == 1) then - return "images/fb_awake.png"; - elseif (value == 2) then - return "images/fb_shield.png"; - elseif (value == 3) then - return "images/fb_throw.png"; - elseif (value == 4) then - return "images/fb_charge.png"; - elseif (value == 5) then - return "images/fb_pylon.png"; - end; -end; - -final_battle = room { - nam = "final_battle"; - pic = function(s) - local image = 'images/fb_bcg.png'; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[1]) .. "@48,0"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[2]) .. "@96,0"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[3]) .. "@96,48"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[4]) .. "@96,96"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[5]) .. "@48,96"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[6]) .. "@0,96"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[7]) .. "@0,48"; - image = image .. ";" .. fb_getGeneratorIcon(s.generators[8]) .. "@0,0"; - if (fb_naethvjirr.hitpoints > 0) then - image = image .. ";images/fb_naethvjirr.png@64,80"; - end; - if (fb_black.hitpoints > 0) then - image = image .. ";images/fb_black.png@80,80"; - end; - image = image .. ";images/fb_player.png@"..tostring(pl.position[1] * 48 + 16)..","..tostring((2 - pl.position[2]) * 48 + 16); - if (fb_pylons.state > 1) then - image = image .. ";images/fb_pylon.png@48,64"; - else - image = image .. ";images/fb_inactive.png@48,64"; - end; - if (fb_pylons.state > 0) then - image = image .. ";images/fb_pylon.png@80,64"; - else - image = image .. ";images/fb_inactive.png@80,64"; - end; - return image; - end; - disp = "Лсэрианотр, центральный зал"; - awakening = 300; - dsc = function(s) - local temp = ""; - if (pl.position[1] == 1 and pl.position[2] == 2) then - temp = "северной"; - elseif (pl.position[1] == 2 and pl.position[2] == 2) then - temp = "северо-восточной"; - elseif (pl.position[1] == 2 and pl.position[2] == 1) then - temp = "восточной"; - elseif (pl.position[1] == 2 and pl.position[2] == 0) then - temp = "юго-восточной"; - elseif (pl.position[1] == 1 and pl.position[2] == 0) then - temp = "южной"; - elseif (pl.position[1] == 0 and pl.position[2] == 0) then - temp = "юго-западной"; - elseif (pl.position[1] == 0 and pl.position[2] == 1) then - temp = "западной"; - elseif (pl.position[1] == 0 and pl.position[2] == 2) then - temp = "северо-западной"; - elseif (pl.position[1] == 1 and pl.position[2] == 1) then - temp = "центральной"; - end; - - local debug_str = tostring(s.awakening) .. " "; - debug_str = debug_str .. tostring(fb_pylons.charging) .. " "; - - return "Вы находитесь в " .. temp .. " части главного зала древнего города Навьяр. На схеме приведено расположение важных объектов в комнате, включая символы, изображенные на генераторах" .. debug_str; - --Вдоль стен стоят огромные металлические шкафы, из которых тысячи проводом тянутся к громадной конструкции в центре зала. Мягкий свет льется сверху, практически ослепляя вас после полумрака остальной части мертвого города. " - --]]; - end; - left = function(s) - lifeoff(s); - end; - entered = function(s) - -- Здесь будем собирать все необходимое для начала финальной битвы: сопартийцы отыграют свою роль, после чего начнется битва не на жизнь, а на смерть. - s.entered = nil; -- Должно отработать не более одного раза - - pl.position = {1,2}; - local throw = rnd(8); - while (s.generators[throw] ~= 1) do - throw = rnd(8); - end; - s.generators[throw] = 3; - - local shield = rnd(8); - while (s.generators[shield] ~= 1) do - shield = rnd(8); - end; - s.generators[shield] = 2; - - local charge = rnd(8); - while (s.generators[charge] ~= 1) do - charge = rnd(8); - end; - s.generators[charge] = 4; - - local pylon = rnd(8); - while (s.generators[pylon] ~= 1) do - pylon = rnd(8); - end; - s.generators[pylon] = 5; - - --[[for i = 1, #pl.party do - if (pl.party[i] == "phaetlarr") - elseif (pl.party[i] == "learr") - elseif (pl.party[i] == "radcliffe") - elseif (pl.party[i] == "wright") - end; - end;]] - - lifeon(s); - end; - life = function(s) - fb_north:enable(); - fb_northeast:enable(); - fb_east:enable(); - fb_southeast:enable(); - fb_south:enable(); - fb_southwest:enable(); - fb_west:enable(); - fb_northwest:enable(); - - if (pl.position[2] == 2) then - fb_north:disable(); - fb_northeast:disable(); - fb_northwest:disable(); - elseif (pl.position[2] == 0) then - fb_south:disable(); - fb_southeast:disable(); - fb_southwest:disable(); - end; - - if (pl.position[1] == 2) then - fb_east:disable(); - fb_northeast:disable(); - fb_southeast:disable(); - elseif (pl.position[1] == 0) then - fb_west:disable(); - fb_northwest:disable(); - fb_southwest:disable(); - end; - - fb_generator:enable(); - if (pl.position[1] == 1 and pl.position[2] == 2) then - fb_generator.index = 1; - elseif (pl.position[1] == 2 and pl.position[2] == 2) then - fb_generator.index = 2; - elseif (pl.position[1] == 2 and pl.position[2] == 1) then - fb_generator.index = 3; - elseif (pl.position[1] == 2 and pl.position[2] == 0) then - fb_generator.index = 4; - elseif (pl.position[1] == 1 and pl.position[2] == 0) then - fb_generator.index = 5; - elseif (pl.position[1] == 0 and pl.position[2] == 0) then - fb_generator.index = 6; - elseif (pl.position[1] == 0 and pl.position[2] == 1) then - fb_generator.index = 7; - elseif (pl.position[1] == 0 and pl.position[2] == 2) then - fb_generator.index = 8; - elseif (pl.position[1] == 1 and pl.position[2] == 1) then - fb_generator:disable(); - end; - - local activeGens = false; - for i = 1, #s.generators do - if (s.generators[i] ~= 0) then - activeGens = true; - end; - end; - - if (not activeGens) then - walk(game_over_victory); - end; - end; - passturn = function(s) - -- реальный расчет боевых действий будет в этой функции - for i = 1,#s.generators do - if (s.generators[i] == 1) then - s.awakening = s.awakening - 10; - end; - end; - for i = 1,#s.obj do - if (s.obj[i].passturn) then - s.obj[i].passturn(s.obj[i]); - end; - end; - if (s.awakening <= 0) then - walk(game_over_awakening); - end; - end; - generators = { - 1, 1, 1, 1, 1, 1, 1, 1 - -- В этот массив заносятся состояния генераторов: a - active, i - inactive, t - throw, s - shield, c - charge, p - pylon - -- Состояния генераторов записываются цифрами по приоритету от минимального до максимального(чем больше цифра, тем больше приоритет) - -- 0 - inactive, 1 - active, 2 - shield, 3 - throw, 4 - charge, 5 - pylon - }; - obj = { - 'fb_pylons', - 'fb_naethvjirr', - 'fb_black', - 'fb_generator', - - 'fb_north', - 'fb_northeast', - 'fb_east', - 'fb_southeast', - 'fb_south', - 'fb_southwest', - 'fb_west', - 'fb_northwest' - }; -}; - -fb_generator = obj { - nam = "fb_generator", - dsc = function(s) - if (final_battle.generators[s.index] == 0) then - return "Рядом с вами расположен огромный металлический {шкаф}, искореженный несколькими ударами кирки. Судя по всему этот генератор выведен из строя. ^"; - else - return "Рядом с вами расположен огромный металлический {шкаф}, расположенный рядом с вами издает негромкий гул. На его передней стенке виден светящийся символ. Конструкция соединена толстыми проводами с троном Наэтвьирра, в центре зала. ^"; - end; - end; - index = 0; - act = "Вы ничего не сможете сделать с генератором без дополнительных приспособлений"; - noshootmsg = "Это бесполезно"; - canhit = true; - onhit = function(s) - --[[ - Модули питания могут быть назначены на одну из нескольких подсистем. - Для питания каждой подсистемы требуется минимум один источник ее питания. Всего подсистемы следующие: пилоны, щит, разряд, разброс и пробуждение. - Приоритеты распределения таковы: - Всегда должна быть активна минимум одна атакующая подсистема, в порядке эффективности: пилоны, разряд, разброс. - Если для атакующих подсистем достаточно энергии, то активен и щит. - Наименьшим приоритетом обладает пробуждение. - Также учитывается возможность и целесообразность применения защитных и атакующих подсистем: - Если аватар уничтожен, нет смысла поддерживать щит, разброс и разряд. - ]] - local gen = final_battle.generators[s.index]; - final_battle.generators[s.index] = 0; - local moreInfo = ""; - if (gen == 5) then - --Как самая эффективная система атаки, пилоны всегда заряжаются, независимо от обстоятельств - fb_pylons.charging = fb_pylons.charging - 4; - if (fb_pylons.charging < 0) then - fb_pylons.charging = 0; - end; - local priorityToReplace = 4; - local activeCount = 0; - for i = 1,#final_battle.generators do - if (final_battle.generators[i] ~= 0 and final_battle.generators[i] <= priorityToReplace) then - activeCount = activeCount + 1; - if (final_battle.generators[i] < priorityToReplace) then - priorityToReplace = final_battle.generators[i]; - end; - end; - end; - if (activeCount > 0) then - local replacementIndex = rnd(8); - while (final_battle.generators[replacementIndex] ~= priorityToReplace) do - replacementIndex = rnd(8); - end; - final_battle.generators[replacementIndex] = gen; - end; - elseif (gen == 4) then - fb_naethvjirr.charge = fb_naethvjirr.charge + 1; - local priorityToReplace = 3; - local activeCount = 0; - for i = 1,#final_battle.generators do - if (final_battle.generators[i] ~= 0 and final_battle.generators[i] <= priorityToReplace) then - activeCount = activeCount + 1; - if (final_battle.generators[i] < priorityToReplace) then - priorityToReplace = final_battle.generators[i]; - end; - end; - end; - if (activeCount > 0) then - local replacementIndex = rnd(8); - while (final_battle.generators[replacementIndex] ~= priorityToReplace) do - replacementIndex = rnd(8); - end; - final_battle.generators[replacementIndex] = gen; - end; - elseif (gen == 3) then - fb_naethvjirr.throw = fb_naethvjirr.throw + 1; - local priorityToReplace = 2; - local activeCount = 0; - for i = 1,#final_battle.generators do - if (final_battle.generators[i] ~= 0 and final_battle.generators[i] <= priorityToReplace) then - activeCount = activeCount + 1; - if (final_battle.generators[i] < priorityToReplace) then - priorityToReplace = final_battle.generators[i]; - end; - end; - end; - if (activeCount > 0) then - local replacementIndex = rnd(8); - while (final_battle.generators[replacementIndex] ~= priorityToReplace) do - replacementIndex = rnd(8); - end; - final_battle.generators[replacementIndex] = gen; - end; - elseif (gen == 2) then - fb_naethvjirr.shield = false; - moreInfo = "Щит вокруг Наэтвьирра растворяется, оставляя конструкта открытым для ваших атак. "; - local priorityToReplace = 1; - local activeCount = 0; - for i = 1,#final_battle.generators do - if (final_battle.generators[i] ~= 0 and final_battle.generators[i] <= priorityToReplace) then - activeCount = activeCount + 1; - if (final_battle.generators[i] < priorityToReplace) then - priorityToReplace = final_battle.generators[i]; - end; - end; - end; - if (activeCount > 0) then - local replacementIndex = rnd(8); - while (final_battle.generators[replacementIndex] ~= priorityToReplace) do - replacementIndex = rnd(8); - end; - final_battle.generators[replacementIndex] = gen; - end; - elseif (gen == 0) then - return "Генератор итак выведен из строя, незачем его дальше колотить. "; - end; - p("После нескольких сильных ударов генератор затихает. ".. moreInfo); - final_battle.passturn(final_battle); - end; -}; - -fb_north = obj { - nam = "north", - dsc = "{На север}", - act = function(s) - pl.position[2] = pl.position[2] + 1; - p("Вы идете на север"); - final_battle.passturn(final_battle); - end; -}; - -fb_northeast = obj { - nam = "northeast", - dsc = "{На северо-восток}", - act = function(s) - pl.position[1] = pl.position[1] + 1; - pl.position[2] = pl.position[2] + 1; - p("Вы идете на северо-восток."); - final_battle.passturn(final_battle); - end; -}; - -fb_east = obj { - nam = "east", - dsc = "{На восток}", - act = function(s) - pl.position[1] = pl.position[1] + 1; - p("Вы идете на восток."); - final_battle.passturn(final_battle); - end; -}; - -fb_southeast = obj { - nam = "southeast", - dsc = "{На юго-восток}", - act = function(s) - pl.position[1] = pl.position[1] + 1; - pl.position[2] = pl.position[2] - 1; - p("Вы идете на юго-восток."); - final_battle.passturn(final_battle); - end; -}; - -fb_south = obj { - nam = "south", - dsc = "{На юг}", - act = function(s) - pl.position[2] = pl.position[2] - 1; - p("Вы идете на юг."); - final_battle.passturn(final_battle); - end; -}; - -fb_southwest = obj { - nam = "southwest", - dsc = "{На юго-запад}", - act = function(s) - pl.position[1] = pl.position[1] - 1; - pl.position[2] = pl.position[2] - 1; - p("Вы идете на юго-запад."); - final_battle.passturn(final_battle); - end; -}; - -fb_west = obj { - nam = "west", - dsc = "{На запад}", - act = function(s) - pl.position[1] = pl.position[1] - 1; - p("Вы идете на запад."); - final_battle.passturn(final_battle); - end; -}; - -fb_northwest = obj { - nam = "northwest", - dsc = "{На северо-запад}", - act = function(s) - pl.position[1] = pl.position[1] - 1; - pl.position[2] = pl.position[2] + 1; - p("Вы идете на северо-запад."); - final_battle.passturn(final_battle); - end; -}; \ No newline at end of file diff --git a/final_scene.lua b/final_scene.lua deleted file mode 100644 --- a/final_scene.lua +++ /dev/null @@ -1,228 +0,0 @@ -adrian_helper = obj { - nam = "adrian_helper"; - life = function(s) - if (char_adrian.state > 1 and char_adrian.state < 5) then - char_adrian.state = char_adrian.state + 1; - elseif (char_adrian.state == 5) then - char_naethvjirr.active = true; - p([[ - Адриан что-то делает с пультом управления и Наэтвьирр оживает - ]]); - lifeoff(s); - walk("pre_battle_scene_normal"); - end; - end; -}; - -char_adrian = obj { - nam = "adrian"; - disp = "Adrian"; - state = 1; - dsc = function(s) - if (char_naethvjirr.active) then - return [[ - Вы видите {Адриана Блэка}, стоящего рядом с автоматоном. ^ - ]]; - else - if (s.state == 1) then - return [[ - Вы видите {Адриана Блэка}, стоящего рядом с автоматоном. Он что-то делает с ним. ^ - ]]; - elseif (s.state < 6) then - return [[ - {Адриан Блэк} собирается включить Наэтвьирра. ^ - ]]; - end; - end; - end; - life = function(s) - if (s.state < 5) then - s.state = s.state + 1; - elseif (s.state == 5) then - char_naethvjirr.active = true; - p([[ - Адриан что-то делает с пультом управления и Наэтвьирр оживает - ]]); - lifeoff(s); - walk("pre_battle_scene_normal"); - end; - end; - act = function(s) - if (s.state == 1) then - walkin "adrian_dlg"; - elseif (s.state < 5) then - return "Надо как-то остановить его, но как?"; - else - -- TODO: Вы сбиваете Адриана с ног - end; - end; -}; - -adrian_dlg = dlg { - nam = "adrian_dlg"; - disp = "Адриан Блэк"; - hideinv = true; - entered = [[ - Блэк поворачивается к вам. Его лицо выражает крайнюю степень удивления: - "Кто вы, черт возьми, такие?!". Он отвлекся от работы с Наэтвьирром. Кажется, он не рад вас видеть. - ]]; - phr = { - {"Адриан Блэк?", [[ - "Предположим. " - ]]}, - {"Что здесь происходит?", [[ - "Завершаю то, что должно было закончиться тысячелетия назад. Эта машина, Наэтвьирр - спящий разум глубин, как его называют Навьяры, или если точнее - Эйлеслвьихенарр - вечный разум глубин и поверхности. Он таит знания тысяч поколений Навьяр - они не должны скрываться под толщей воды, они должны быть открыты нам! " - ]], [[ pstart 'more_naethvjirr' ]]}, - { - tag="more_naethvjirr" - }, - {"Что вы знаете о Наэтвьирре?", [[ - "Согласно легендам, собранным мной в разных поселениях навьяров, Наэтвьирр был построен в глубокой древности навьярами, которые тогда господствовали как под водой, так и на суше. Единственной целью существования Наэтвьирра было стать "вечным мудрецом" - "эйлеслэйлайхевьирр", как его называют до сих пор в некоторых местах. Имена менялись, как всегда было у навьяров, но всегда отражали суть - частично или полностью - мыслящая, всезнающая машина, способная ответить на многие вопросы и помочь принять многие трудные решения. Только по чудовищному недоразумению он не был активирован раньше. " - ]]}, - {"Вы понимаете, насколько опасно включать эту машину, как бы она ни называлась?", [[ - "Во-первых, не тебе учить меня. Во-вторых, я все предусмотрел - в случае опасности я смогу отключить его." - ]], [[ pstart 'halt_naethvjirr' ]]}, - { - tag="halt_naethvjirr", - empty = function() - char_adrian.state = 2; - p("^^С этими словами, Адриан подходит к рубильнику. У вас есть несколько мгновений, чтобы отреагировать"); - walk("final_scene"); - char_naethvjirr.canshoot = true; - lifeon(adrian_helper); - end - }, - {"Как вы собираетесь управлять им, если ключ утерян? *Вы показываете Адриану табличку со схемой работы Наэтвьирра*", [[ - Адриан показывает вам серебристую пластинку небольшого размера(около 20х15см), на которой отсвечивают красноватые круги и линии. - "Я все предусмотрел. Без этой деталюшки Наэтвьирр будет серьезно ограничен в возможностях - это тот самый компонент, который должен блокироваться или разблокироваться ключом. " - ]]} - }; -}; - -char_naethvjirr = obj { - nam = "naethvjirr"; - disp = "Наэтвьирр"; - disp2 = "Наэтвьирра"; - canshoot = false; - dsc = function(s) - if (s.active) then - return [[ - В центре зала перед массивной конструкцией, напоминающей трон, стоит {автоматон навьяр}. Конструкт выглядит совершенно как живой, сияющие белым светом глаза оглядывают помещение и вас в ожидании ваших действий. Тысячи проводов тянутся от "трона" к стенам, подобно щупальцам. ^ - ]]; - else - return [[ - В центре зала на массивной конструкции, напоминающей трон, сидит {навьяр}. Конструкт выглядит совершенно как живой, однако он абсолютно неподвижен. Покрытые серебристой чешуей, его руки покоятся на коленях. Тысячи проводов тянутся от "трона" и фигуры к стенам, подобно щупальцам. Глаза навьяра закрыты. ^ - ]]; - end; - end; - act = [[ - Я пока не знаю, что с этим делать - ]]; - noshootmsg = "Я не знаю, к чему это приведет, пока лучше этого не делать"; - nohitmsg = "Я не знаю, к чему это приведет, пока лучше этого не делать"; - onshoot = function(s) - p("^^Ваш выстрел повреждает Наэтвьирра, но вы не замечаете, сказалось ли это на его работоспособности"); - fb_naethvjirr.hitpoints = 2; - char_adrian.state = 6; - -- TODO Адриан стреляет в одного из членов партии - if (#pl.party ~= 0) then - local chosen_one; - local chosen_one_index = rnd(#pl.party); - local chosen_one_name = pl.party[chosen_one_index]; - if (chosen_one_name == "learr") then - chosen_one = char_learr_fb; - elseif (chosen_one_name == "phaetlarr") then - chosen_one = char_phaetlarr_fb; - elseif (chosen_one_name == "radcliffe") then - chosen_one = char_radcliffe_fb; - else - chosen_one = char_wright_fb; - end; - table.remove(pl.party, chosen_one_index); - p("^^Адриан вскидывает пистолет и стреляет в вашу сторону. " .. chosen_one.disp .. " падает замертво"); - - walk("pre_battle_scene_fight"); - else - -- TODO Адриан стреляет в вас - walk("game_over_shot"); - end; - end; -}; - -char_learr_fb = obj { - nam = "learr_fb"; - disp = "Леарр"; - dsc = function() - return [[ - {Леарр} смотрит попеременно то на вас, то на Адриана ^ - ]]; - end; -}; - -char_phaetlarr_fb = obj { - nam = "phaetlarr_fb"; - disp = "Фаэтларр"; - dsc = function() - return [[ - {Фаэтларр} оглядывает зал ^ - ]]; - end; -}; - -char_radcliffe_fb = obj { - nam = "radcliffe_fb"; - disp = "Уолтер Рэдклифф"; - dsc = function() - return [[ - {Уолтер Рэдклифф} с интересом разглядывает Наэтвьирра ^ - ]]; - end; -}; - -char_wright_fb = obj { - nam = "wright_fb"; - disp = "Джек Райт"; - dsc = function() - return [[ - {Джек Райт} ждет ваших действий ^ - ]]; - end; -}; - -final_scene= room { - nam = "final_scene"; - disp = "Лсэрианотр, центральный зал"; - dsc = [[ - Вы находитесь в центральном зале древнего города Навьяр. Вдоль стен стоят огромные металлические шкафы, из которых тысячи проводом тянутся к громадной конструкции в центре зала. Мягкий свет льется сверху, практически ослепляя вас после полумрака остальной части мертвого города. - ]]; - obj = { - "char_naethvjirr", - "char_adrian", - "adrian_helper", - "char_learr_fb", - "char_phaetlarr_fb", - "char_radcliffe_fb", - "char_wright_fb" - }; -}; - -pre_battle_scene_fight = room { - nam = "pre_battle_scene_fight"; - disp = "Лсэрианотр, центральный зал"; - dsc = [[ - Вы не успеваете опомниться, как Блэк снова стоит у пульта, а Наэтвьирр открывает глаза и оглядывает помещение. Адриан тут же издает приказ, указывая на вас:"Убей их" - ]]; - obj = { - vway("Продолжить", "{Продолжить}", 'final_battle') - }; -}; - -pre_battle_scene_normal = room { - nam = "pre_battle_scene_normal"; - disp = "Лсэрианотр, центральный зал"; - dsc = [[ - В глазах автоматона зажигается мягкий синий свет и он поворачивается к Адриану. Какое-то время он молчит, видимо, пытаясь подобрать наиболее подходящий язык для общения. В итоге по головным плавникам Навьяра побежали цветные полосы - ставший уже столь привычным для вас, способ общения среди Навьяров. Он "говорит" быстро, и вы успеваете понять лишь отдельные слова: "время", "пробуждение", "повелитель". Вы понимаете, что у вас есть еще немного времени, чтобы остановить его. Едва вы достаете оружие, как из пола перед троном поднимаются два небольших пилона. Очевидно, что город будет защищать своего хозяина. - ]]; - obj = { - vway("Продолжить", "{Продолжить}", 'final_battle') - }; -}; \ No newline at end of file diff --git a/first_city_inner_rim.lua b/first_city_inner_rim.lua deleted file mode 100644 --- a/first_city_inner_rim.lua +++ /dev/null @@ -1,163 +0,0 @@ --- TODO (приват) добавить описание шлюза --- TODO (приват) картинка с дисплея терминала --- TODO (приват) вменяемое описание цели данного паззла, тексты на навьярском или реалистичное объяснение их понятности персонажу -first_city_airlock_control = room { - nam = "first_city_airlock"; - disp = "Комната управления шлюзом центрального зала"; - dsc = function (s) - return "Вы находитесь в небольшой комнате. Перед вами расположен дисплей, на котором расположены три вертикальные полосы разной длины. " .. tostring(s.tanks[1]) .. "/" .. tostring(s.tanks[2]) .. "/" .. tostring(s.tanks[3]); - end; - tanks = {10, 0, 0}; - tanks_capacity = {10, 7, 3}; - selected_source = nil; - selected_target = nil; - detect = function(s) - if (tanks[2] == 5) then - return true; - else - return false; - end; - end; - obj = { - "first_city_transfer", - "first_city_select_s", - "first_city_select_p", - "first_city_select_a" - }; -}; - -first_city_transfer = obj { - nam = "first_city_transfer"; - dsc = "{Выполнить} ^"; - act = function(s) - if (first_city_airlock_control.selected_source and first_city_airlock_control.selected_target) then - local tmp = math.min(first_city_airlock_control.tanks[first_city_airlock_control.selected_source], first_city_airlock_control.tanks_capacity[first_city_airlock_control.selected_target] - first_city_airlock_control.tanks[first_city_airlock_control.selected_target]); - first_city_airlock_control.tanks[first_city_airlock_control.selected_source] = first_city_airlock_control.tanks[first_city_airlock_control.selected_source] - tmp; - first_city_airlock_control.tanks[first_city_airlock_control.selected_target] = first_city_airlock_control.tanks[first_city_airlock_control.selected_target] + tmp; - first_city_airlock_control.selected_source = nil; - first_city_airlock_control.selected_target = nil; - return "Выполнено"; - else - return "Невозможно выполнить"; - end; - end; -}; - -first_city_select_s = obj { - nam = "first_city_select_s"; - dsc = "{Выбрать первый баллон} ^"; - act = function(s) - if (not first_city_airlock_control.selected_source) then - first_city_airlock_control.selected_source = 1; - else - first_city_airlock_control.selected_target = 1; - end; - - return ""; - end; -}; - -first_city_select_p = obj { - nam = "first_city_select_p"; - dsc = "{Выбрать второй баллон} ^"; - act = function(s) - if (not first_city_airlock_control.selected_source) then - first_city_airlock_control.selected_source = 2; - else - first_city_airlock_control.selected_target = 2; - end; - - return ""; - end; -}; - -first_city_select_a = obj { - nam = "first_city_select_a"; - dsc = "{Выбрать третий баллон} ^"; - act = function(s) - if (not first_city_airlock_control.selected_source) then - first_city_airlock_control.selected_source = 3; - else - first_city_airlock_control.selected_target = 3; - end; - - return ""; - end; -}; - -first_city_inner_south = room { - nam = "first_city_inner_south"; - disp = "Лсэрианотр, внутреннее кольцо, юг"; - gate = "first_city_middle_south"; - east = "first_city_inner_east"; - west = "first_city_inner_west"; - navigatable = true; - dsc = [[ - Вы находитесь в южной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в южной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_inner_east = room { - nam = "first_city_inner_east"; - disp = "Лсэрианотр, внутреннее кольцо, восток"; - south = "first_city_inner_south"; - north = "first_city_inner_north"; - navigatable = true; - dsc = [[ - Вы находитесь в восточной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в восточной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_inner_west = room { - nam = "first_city_inner_west"; - disp = "Лсэрианотр, внутреннее кольцо, запад"; - south = "first_city_inner_south"; - north = "first_city_inner_north"; - navigatable = true; - dsc = [[ - Вы находитесь в западной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в западной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_inner_north = room { - nam = "first_city_inner_north"; - disp = "Лсэрианотр, внутреннее кольцо, север"; - east = "first_city_inner_east"; - west = "first_city_inner_west"; - navigatable = true; - entered = function(s) - if (first_city_airlock_control.detect(first_city_airlock_control)) then - path("first_city_to_center"):enable(); - end; - end; - dsc = [[ - Вы находитесь в северной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в северной части внутреннего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - way = { - kh_vroom("Центр города", "first_city_central_room_entrance", "first_city_to_center"):disable(); - kh_vroom("Левиафан", "leviathan_airlock"); - }; -}; - -first_city_central_room_entrance = room { - nam = "first_city_central_room_entrance"; - disp = "Лсэрианотр, Вход в центральный зал"; - dsc = [[ - Вы находитесь у входа в центральный зал Лсэрианотра. Входная дверь закрывается и вода быстро откачивается из помещения. Вы снимаете скафандр и готовитесь к встрече с Уильямом. Отсюда пути назад уже нет. - ]]; - obj = { - vway("Центральный зал", "{Вперед}", "final_scene_before_battle"); - }; -}; \ No newline at end of file diff --git a/first_city_middle_rim.lua b/first_city_middle_rim.lua deleted file mode 100644 --- a/first_city_middle_rim.lua +++ /dev/null @@ -1,71 +0,0 @@ --- dependencies -dofile "powerplant.lua"; -dofile "engineering.lua"; - --- TODO (приватная бета-версия) добавить описания ворот открытых и закрытых --- TODO (приватная бета-версия) пометить описание инженерного зала в западный сектор - -first_city_middle_south = room { - nam = "first_city_middle_south"; - disp = "Лсэрианотр, среднее кольцо, юг"; - east = "first_city_middle_east"; - west = "first_city_middle_west"; - navigatable = true; - open = function(s) - s.gate = "first_city_inner_south"; - end; - dsc = [[ - Вы находитесь в южной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в южной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_middle_east = room { - nam = "first_city_middle_east"; - disp = "Лсэрианотр, среднее кольцо, восток"; - south = "first_city_middle_south"; - north = "first_city_middle_north"; - navigatable = true; - dsc = [[ - Вы находитесь в восточной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - Вы видите огромное здание, стоящее поодаль от других. Над огромными двойными дверями расположен символ, недвусмысленно намекающий на назначение этого здания даже незнакомым с языком Навьяр - три молнии, исходящие из круга в центре. Вы чувствуете слабую вибрацию, исходящую из этого здания. - ]]; - view = [[ - Вы находитесь в восточной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - Вы видите огромное здание, стоящее поодаль от других. Над огромными двойными дверями расположен символ, недвусмысленно намекающий на назначение этого здания даже незнакомым с языком Навьяр - три молнии, исходящие из круга в центре. Вы чувствуете слабую вибрацию, исходящую из этого здания. - ]]; - way = { - kh_vroom("В здание", "first_city_powerplant", "to_powerplant"):disable(); - }; -}; - -first_city_middle_west = room { - nam = "first_city_middle_west"; - disp = "Лсэрианотр, среднее кольцо, запад"; - south = "first_city_middle_south"; - north = "first_city_middle_north"; - navigatable = true; - dsc = [[ - Вы находитесь в западной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в западной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; - -first_city_middle_north = room { - nam = "first_city_middle_north"; - disp = "Лсэрианотр, среднее кольцо, север"; - gate = "first_city_outer_north"; - east = "first_city_middle_east"; - west = "first_city_middle_west"; - navigatable = true; - dsc = [[ - Вы находитесь в северной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в северной части среднего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; -}; \ No newline at end of file diff --git a/first_city_outer_rim.lua b/first_city_outer_rim.lua deleted file mode 100644 --- a/first_city_outer_rim.lua +++ /dev/null @@ -1,221 +0,0 @@ ---dependencies -dofile "service_tunnels.lua"; -dofile "hope.lua"; -dofile "hope_cutscene.lua"; - --- TODO (приватная бета-версия) добавить описания ворот открытых и закрытых - -char_first_city_guardian = obj { - nam = "first_city_guardian"; - disp = "Страж"; - dsc = [[ - Вы видите фигуру {Навьяра}, стоящего около ворот. Приглядевшись внимательнее, вы понимаете, что это автоматон.^ - ]]; - act = function() - return [[ - Автоматон выглядит намного совершеннее тех, что вам доводилось видеть на Атлантиде. Его тело покрыто чешуей, как и тело живых Навьяр. Его выдают лишь стеклянные немигающие глаза и полная неподвижность. - Головные плавники автоматона плавно меняют цвета, но даже если бы вы понимали, что это значит, вы не смогли бы ему ответить. - ]]; - end -}; - -first_city_entrance = room { - nam = "first_city_entrance"; - disp = "Лсэрианотр, врата"; - dsc = function(s) - if (not s.open) then - return [[ - Вы находитесь на глубине нескольких километров под водой. Прожектор вашего скафандра с трудом пробивает непроглядную толщу воды. - Почти вплотную перед вами расположены огромные ворота из неизвестного материала. - ]]; - else - return [[ - Вы находитесь на глубине нескольких километров под водой. Прожектор вашего скафандра с трудом пробивает непроглядную толщу воды. - Огромные ворота открыты и Левиафан легко пройдет в них. - ]]; - end; - end; - view = function(s) - if (not s.open) then - return [[ - "Левиафан" находится на глубине нескольких километров под водой. Мощный прожектор субмарины с трудом пробивает непроглядную толщу воды. - Огромные ворота из неизвестного материала преграждают вам путь внутрь. - ]]; - else - return [[ - "Левиафан" находится на глубине нескольких километров под водой. Мощный прожектор субмарины с трудом пробивает непроглядную толщу воды. - Огромные ворота открыты и Левиафан легко пройдет в них. - ]]; - end; - end; - obj = { - "char_first_city_guardian"; - }; - way = { - vroom("Левиафан", "leviathan_airlock"); - }; -}; - -first_city_outer_south = room { - nam = "first_city_outer_south"; - disp = "Лсэрианотр, внешнее кольцо, юг"; - gate = "first_city_entrance"; - east = "first_city_outer_east"; - west = "first_city_outer_west"; - navigatable = true; - entered = function(s) - s.entered = nil; - -- Должно выполняться только один раз: - -- 1. Генерируем сервисные тоннели - -- 2. Генерируем табличку сервисных тоннелей для библиотеки - -- 3. Генерируем ссылки на документы на Надежде - end; - dsc = [[ - Вы находитесь в южной части внешнего кольца Лсэрианотра. Это огромный коридор, опоясывающий город по периметру. - Высоко над головой виден прозрачный купол, не дающий проникнуть в город минуя ворота. - ]]; - view = [[ - Вы находитесь в южной части внешнего кольца Лсэрианотра. Это огромный коридор, опоясывающий город по периметру. - Высоко над головой виден прозрачный купол, не дающий проникнуть в город минуя ворота. - ]]; - way = { - vroom("Левиафан", "leviathan_airlock"); - }; -}; - -first_city_outer_east = room { - nam = "first_city_outer_east"; - disp = "Лсэрианотр, внешнее кольцо, восток"; - south = "first_city_outer_south"; - north = "first_city_outer_north"; - navigatable = true; - dsc = [[ - Вы находитесь в восточной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. На востоке вы видите огромное здание с большим количеством труб, идущих до самого купола. Скорее всего, это какая-то древняя фабрика. - ]]; - view = [[ - Вы находитесь в восточной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - way = { - vroom("Левиафан", "leviathan_airlock"); - vroom("В здание", "first_city_factory"); - }; -}; - -first_city_outer_west = room { - nam = "first_city_outer_west"; - disp = "Лсэрианотр, внешнее кольцо, запад"; - south = "first_city_outer_south"; - north = "first_city_outer_north"; - navigatable = true; - dsc = [[ - Вы находитесь в западной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в западной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - way = { - vroom("Левиафан", "leviathan_airlock"); - vroom("В здание", "first_city_library"); - }; -}; - -first_city_outer_north = room { - nam = "first_city_outer_north"; - disp = "Лсэрианотр, внешнее кольцо, север"; - gate = "first_city_middle_north"; - east = "first_city_outer_east"; - west = "first_city_outer_west"; - navigatable = true; - dsc = [[ - Вы находитесь в северной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - view = [[ - Вы находитесь в северной части внешнего кольца Лсэрианотр. Это огромный коридор, опоясывающий город по периметру. - ]]; - obj = { - "submarine_hope" - }; - way = { - vroom("Левиафан", "leviathan_airlock"); - vroom("Надежда", "hope_airlock"); - }; -}; - -path_first_city_tunnel = vroom("В сервисный тоннель", "service_tunnels"); - -first_city_factory = room { - nam = "first_city_factory"; - disp = "Лсэрианотр, внешнее кольцо, завод"; - entered = function(s) - service_tunnels.position = "3"; - end; - dsc = [[ - Помещение, в котором вы находитесь, очевидно, некогда было заводом. Конвейеры, странные механизмы, разбросанные инструменты, долгие тысячелетия лежавшие без движения. - ]]; - obj = { - "item_pickaxe", - "first_city_crack" - }; - way = { - disable(path_first_city_tunnel); - }; -}; - -first_city_crack = obj { - nam = "first_city_crack"; - dsc = "В дальней стене вы видите {трещину}. Сквозь нее пробивается слабый свет, очевидно там какое-то помещение."; - act = function(s) - if (s.wide) then - return [[ - Вы видите за щелью какие-то тоннели. Вы сможете пролезть туда. - ]]; - else - return [[ - Нужно чем-то расширить эту щель, если вы хотите туда попасть - ]]; - end; - end; - canhit = true; - onhit = function(s) - if (s.wide) then - return "Трещина уже достаточно большая для вас, нет смысла еще что-то с ней делать." - else - s.wide = true; - enable(path_first_city_tunnel); - return "Несколькими осторожными ударами кирки вы расширяете трещину достаточно, чтобы пролезть внутрь." - end; - end; - -}; - -first_city_library = room { - nam = "first_city_library"; - disp = "Лсэрианотр, внешнее кольцо, библиотека"; - dsc = [[ - В здании вы видите огромные стеллажи, заполненные табличками из неизвестного материала. Таблички исписаны письменами Навьяров и потускнели от времени. - ]]; - obj = { - 'first_city_index', - 'first_city_maintenance_info' - }; -}; - -first_city_index = obj { - nam = "first_city_index"; - dsc = "На стене возле входа висит большая {табличка}. "; - act = function(s) - end; -}; - -first_city_maintenance_info = obj { - nam = "first_city_index"; - dsc = "Один из {стеллажей} рядом со входом содержит информацию об обслуживании Лсэрианотра. Вероятно, там вы найдете то, что поможет вам отключить охранную систему города. "; - act = function(s) - if (s.taken) then - return "Врядли вы найдете здесь что-то еще полезное. "; - else - take("item_service_info") - return "Вы просматриваете тысячи записей и уже почти теряете всякую надежду когда натыкаетесь на табличку, описывающую сервисные тоннели города. "; - end; - end; -}; \ No newline at end of file diff --git a/hope.lua b/hope.lua deleted file mode 100644 --- a/hope.lua +++ /dev/null @@ -1,140 +0,0 @@ ---[[ -Субмарина Уильяма. Она серьезно пострадала, и врядли экипаж цел. -]] - -submarine_hope = obj { - nam = "submarine_hope"; - disp = "Надежда"; - dsc = [[ - Вы видите "{Надежду}" - субмарину Уильяма Дрейка, первую построенную им. Она заметно пострадала в результате выстрелов из расположенной у входа турели, однако, экипаж в последний момент успел увести подлодку на безопасное расстояние. Люк субмарины разбит и вы сможете заплыть внутрь. - ]]; - act = [[ Субмарина сильно повреждена, герметичность корпуса очевидно нарушена. Врядли в ней остался кто-то живой, однако не помешает это проверить. Надпись на борту гласит "А00 - Надежда" ]]; - -- function() - -- walk "leviathan_airlock"; - -- return "Оказавшись внутри, вы закрываете за собой люк"; - --end; -}; - -hope_airlock = room { - nam = "hope_airlock"; - disp = "Надежда, шлюз"; - dsc = [[ - Вы находитесь в шлюзовой камере "Надежды". Она практически идентична шлюзовой камере Левиафана. Сейчас она не функционирует - камера заполнена водой и оба люка открыты. - ]]; - way = { - vroom("Наружу", "first_city_outer_north"); - vroom("В рубку", "hope_wheelhouse"); - }; -}; - -hope_cargo_door = obj { - nam = "hope_cargo_door"; - disp = "Люк в грузовой отсек"; - dsc = function(s) - if (s.state == 2) then - return [[ - {Люк} в грузовой отсек открыт. - ]]; - else - return [[ - {Люк} в грузовой отсек задраен. - ]]; - end; - end; - state = 0; - act = function(s) - if (s.state == 0) then - if (char_learr.follow) then - pn([[Вы пытаетесь открыть люк, однако, похоже, он заблокирован с другой стороны. В смотровом люке вы видите голову навьяра, смотрящего на вас. В темноте вы с трудом различаете цветные полосы на его головных плавниках. Полосы бегут нарочито медленно, чтобы вы успели его понять. Леарр мягко отодвигает вас от смотрового отверстия. тем же способом, она что-то говорит навьяру, находящемуся по ту сторону люка. Через несколько минут подобного общения Леарр кивает вам, показывая на дверь. ]]); - s.state = 1; - else - pn([[Вы пытаетесь открыть люк, однако, похоже, он заблокирован с другой стороны. В смотровом люке вы видите голову навьяра, смотрящего на вас. В темноте вы с трудом различаете цветные полосы на его головных плавниках. Полосы бегут нарочито медленно, чтобы вы успели его понять. Вы с трудом переводите цвета в символы: "Eyle'yhe'he'vji'a'rr vee'nn vtre'e'ran'rr" ]]); - end; - elseif (s.state == 1) then - pn([[Вы начинаете открывать люк и огромное количество пузырей воздуха просачивается через образовавшуюся щель. Леарр жестом показывает вам, чтобы вы продолжали. Вы ждете, когда вода заполнит отсек, после чего открываете люк до конца. ]]); - hope_airlock_pass:enable(); - s.state = 2; - elseif (s.state == 2) then - pn("Люк уже открыт"); - end; - return true; - end; -}; - -hope_airlock_pass = vroom("В грузовой отсек", "hope_cargo_hold"); - -hope_wheelhouse = room { - nam = "hope_wheelhouse"; - disp = "Надежда, рубка"; - dsc = [[ - Вы находитесь в рубке "Надежды". По размерам она заметно больше, чем рубка на Левиафане. Помещение заполнено водой. Люки в машинное отделение и пассажирский отсек открыты. - ]]; - obj = { - hope_cargo_door - }; - way = { - vroom("В машинное отделение", "hope_engines"); - hope_airlock_pass:disable(); - vroom("В помещение экипажа", "hope_dormitory"); - }; -}; - -hope_engines = room { - nam = "hope_engines"; - disp = "Надежда, машинное отделение"; - dsc = [[ - Вы находитесь в машинном отделении "Надежды". Попадание воды вызвало короткое замыкание в электрической цепи субмарины. Вам нечего здесь делать. - ]]; - way = { - vroom("В рубку", "hope_wheelhouse"); - }; -}; - -hope_cargo_hold = room { - nam = "hope_cargo_hold"; - disp = "Надежда, грузовой отсек"; - dsc = [[ - Вы находитесь в грузовом отсеке "Надежды". Герметичные контейнеры сохранили большую часть груза в целости и сохранности, однако на "Левиафане" достаточно собственных припасов, так что вам придется оставить все это здесь. - ]]; - way = { - vroom("В рубку", "hope_wheelhouse"); - }; - obj = { - "char_phaetlarr_hope"; - }; -}; - -hope_dormitory = room { - nam = "hope_dormitory"; - disp = "Надежда, помещение для экипажа"; - dsc = [[ - Шесть коек расположены вдоль трех стен помещения в два яруса. Вам нечего здесь делать. - ]]; - way = { - vroom("В рубку", "hope_wheelhouse"); - }; -}; - -char_phaetlarr_hope = obj { - nam = "char_phaetlarr_hope"; - disp = "Фаэтларр"; - dsc = "Рядом с люком, скрестив руки на груди, стоит {навьяр}. Он, кажется, серьезно удивлен вашим появлением. ^"; - act = function(s) - walkin(phaetlarr_hope_dlg); - end; -}; - -phaetlarr_hope_dlg = dlg { - nam = "phaetlarr_hope_dlg"; - disp = "Навьяр"; - entered = [[ - Навьяр выглядит удивленным и напуганным, однако, судя по всему, он готов вас выслушать. К сожалению, здесь с ним не получится нормально общаться. Цветные полосы на головных плавниках навьяра складываются в слово "Pha'e'tla'rr" - сияющий. - ]]; - phr = { - {"Указать на навьяра левой рукой, правой указать на себя, затем на дверь", "Навьяр кивает головой. \"I'rr vee'nn\"", function() - -- Все втроем вы возвращаетесь на Левиафан - walk("cutscene_hope"); - return false; - end;}; - }; -}; \ No newline at end of file diff --git a/hope_cutscene.lua b/hope_cutscene.lua deleted file mode 100644 --- a/hope_cutscene.lua +++ /dev/null @@ -1,117 +0,0 @@ --- TODO переписать диалоги с сопартийцами. -cutscene_learr_dlg = dlg { - nam = "cutscene_learr_dlg"; - disp = "Леарр"; - entered = [[ - Леарр с интересом рассматривает Фаэтларра. Она почти не обращает на вас внимания - ]]; - phr = { - {"Что скажешь?", [[ - Леарр отрывает взгляд от Фаэтларра и поворачивается к вам: "Никогда не думала, что твой отец водится с такими людьми, как Адриан. " - ]], [[ pstart("adrian") ]]}; - {"*поговорить с кем-то другим*", [[Вы решаете не беспокоить Леарр]], [[ back() ]]}; - {tag = "adrian"}; - {"Он не был таким изначально. Уильям знал его достаточно хорошо. Думал, что знал. ", [[ - Леарр пожимает плечами: "Возможно, ты прав. Все равно, нам нужно остановить его" - ]], [[ back() ]]}; - {"Без Адриана он не дошел бы так далеко ", [[ - "Без Адриана, он остался бы жив!" - Леарр отворачивается от вас, снова погружаясь в свои мысли. - ]], [[ back() ]]}; - {"Если честно, я и сам удивлен", [[ - Леарр молча смотрит на вас. Вскоре она отворачивается от вас, погружаясь в свои мысли. - ]], [[ back() ]]}; - }; -}; - -cutscene_phaetlarr_dlg = dlg { - nam = "cutscene_phaetlarr_dlg"; - disp = "Фаэтларр"; - entered = [[ - Фаэтларр с недоверием смотрит на вас и на остальных присутствующих. - ]]; - phr = { - {"Успокойся, ты можешь доверять нам. Мое имя Дэвид Дрейк", [[ - Фаэтларр вопросительно смотрит на Леарр. Она отвечает на вашем языке "Все в порядке. Мы не хотим навредить ни тебе ни твоему городу. Наша цель - предотвратить пробуждение Наэтвьирра". Потом Фаэтларр отвечает: "Я готов помогать вам". Его акцент гораздо сильнее, чем у Леарр, которая провела в обществе людей несравненно дольше. - ]], [[ pstart 'ch1' ]]}; --TODO пофиксить фразу, если кроме Леарр никого в партии нет - {tag = "ch1"}; - {"Что произошло на \"Надежде\"?", [[ - "Я мало знаю, что происходило в последние дни. Когда Адриан вернулся из Илерьяанотлекра, он запер меня на складе. Не уверен, сколько дней прошло, достаточно много, я думаю, когда наш корабль сильно сотрясло. Как оказалось, я находился в единственном отсеке, куда не попала вода. Он долго пытался меня оттуда вытащить, только вот не учли пары вещей: Я уже достаточно хорошо знал многие особенности конструкции субмарины, в частности то, что отсек может быть заперт только с одной стороны одновременно. Это сделано специально, чтобы избеждать ряда неприятных ситуаций. Вобщем как только он разблокировал дверь со своей стороны, я заблокировал ее изнутри. Не знаю, почему он забыл об этой простой вещи, когда запирал меня. " - ]], [[ psub 'hope_qs' ]]}; - {"Ты знал Уильяма Дрейка?", [[ - "Знал... Знаю. Eylesl'hya'e'ava'nn Pte'rr. " - ]], [[ psub 'drake_qs' ]]}; - {tag = "hope_qs"}; - {"Расскажи, как ты оказался на \"Надежде\"", [[ - "Уильям пригласил меня в качестве навигатора. В то время я занимался изучением истории нашего народа - сопоставлял различные карты. Естественно, я уже знал о Наэтвьирре и даже примерно знал, где находится Лсэрианотр. Конечно, без Уильяма и, говоря честно, Адриана, я никогда не смог бы определить его точное местоположение. Поясню: из исторических источников и старых рассказов я смог определить расположение Илерьяанотлекра. Тогда я полагал, что этот город - и есть легендартный Лсэрианотр - первый город, древний центр нашей цивилизации. Я мало что знал о Наэтвьирре тогда. Если бы я только знал, чем все обернется..." - ]]}; - --[[{"Где сейчас Адриан?", [ - "Если он еще жив, то он либо пробирается к центру города, либо уже там. В любом случае вам стоит поторопиться. Вы позволите мне присоединиться к вам? " - ], [ psub 'join' ]};--]] - {"Где сейчас Адриан?", [[ - "Если он еще жив, то он либо пробирается к центру города, либо уже там. В любом случае вам стоит поторопиться. Я согласен помогать вам. " - ]]}; - {"Сколько всего человек было на борту?", [[ - "Когда я присоединился, нас было шестеро, включая меня: Уильям Дрейк командовал экспедицией. Собственно из-за него я и присоединился к экипажу. Тогда он хотел, чтобы Наэтвьирр послужил на благо всем - и навьярам и хевьярам. Тогда он предложил мне быть навигатором. С ним был Адриан Блэк - он сразу показался мне странным, не внушающим доверия. Однажды Уильям сказал мне, что когда все только начиналось, Адриан был совсем другим человеком. Я думаю, только так можно объяснить, почему они оказались на одном корабле. Винсент Даркстар - инженер - от него я узнал очень многое об устройстве субмарины. К сожалению, он погиб во время нападения на нас жителей Илерьяанотлекра. Тогда почти все и погибли - Сильвия, Винсент, Джон." - Фаэтларр тяжело вздохнул и добавил на своем языке: Eylesl'hya'e'ava'nn Eyle'pte'rr. - ]]}; - {tag = "drake_qs"}; - {"Что произошло с Уильямом?", [[ - "Последнее время Уильям всерьез задумывался о целесообразности возрождения Наэтвьирра. Он наджеялся найти больше ответов в Лсэрианотре, провести там столько времени, сколько потребуется прежде чем принимать решение. Блэк был недоволен этим - не хотел ждать. Мне кажется, он хотел единолично контроллировать Наэтвьирра. Не могу понять, почему Уильям доверял этому человеку. Не могу понять, почему он вообще взял его с собой." - ]]}; - {"Расскажи больше об Уильяме", [[ - "Он - искатель, как говорят у нас. Все время в дороге, читает, ищет, расспрашивает. Лсэрианотр - достойная цель, если ищет ее кто-то достойный. Уильям - такой. Он собрал вокруг себя отличную команду - Сильвия, ее не волнуют древние знания, забытые города и прочее... прошлое, она ищет друзей, помощников, сама готова помогать. Винсент - мне кажется, его ничего кроме корабля не интересует. Он многое мне рассказал об устройсте "Надежды". Джон - мало его знаю, он неразговорчив, однако Уильям безоговорочно доверяет ему. Я думаю, есть за что. Хотя с Адрианом он очень сильно ошибся. " - ]]}; - --[[{tag = "join"}; - {"Конечно, ты нам здорово поможешь", [ - "Замечательно, вместе мы остановим Адриана, а потом он предстанет перед судом Нарьяанотра. " - ]}; - {"Не думаю, что ты будешь полезен", [ - Лицо Фаэтларра снова принимает недоуменное, слегка испуганное выражение: "Значит, вы бросите меня здесь?" В разговор, внезапно, вмешивается Леарр: "Ты не сделаешь этого, Дэвид! Я уйду вместе с ним" - ]}; -- TODO решить, сделать "плохой" вариант сюжета, если будет время. Обрезать все концы, если его не будет - --]] - }; - exit = function(s) - table.remove(cutscene_hope.obj, 1); - PartyUtils.addToParty(char_phaetlarr); - put(vway("Леарр", "{Поговорить с Леарр. ^}", "cutscene_learr_dlg"), cutscene_hope); - put(vway("Райт", "{Поговорить с Райтом. ^}", "cutscene_wright_dlg"), cutscene_hope); - put(vway("Рэдклифф", "{Поговорить с Рэдклиффом. ^}", "cutscene_radcliffe_dlg"), cutscene_hope); - put(vway("Закончить собрание", "{Закончить собрание. ^}", "leviathan_wardroom"), cutscene_hope); - end; -}; - -cutscene_wright_dlg = dlg { - nam = "cutscene_wright_dlg"; - disp = "Райт"; - entered = [[ - Джек задумчиво смотрит на Фаэтларра. "А можем ли мы доверять ему?" - спрашивает он наконец. - ]]; - phr = { - {"Леарр доверяет ему, насколько я понял. Я доверяю ей. ", [[ - будь по-твоему - ]]} - }; -}; - -cutscene_radcliffe_dlg = dlg { - nam = "cutscene_radcliffe_dlg"; - entered = [[ - Уолтер задумчиво смотрит на Фаэтларра. "А можем ли мы доверять ему?" - спрашивает он наконец. - ]]; - phr = { - {"Леарр доверяет ему, насколько я понял. Я доверяю ей. ", [[ - будь по-твоему - ]]} - }; -}; - -cutscene_hope = room { - nam = "cutscene_hope"; - disp = "Левиафан, кают-компания"; - leviathan = true; - dsc = [[ - Вы возращаетесь на Левиафан. В кают-компании вас уже ждут остальные члены экипажа. Наконец-то вы можете расспросить Фаэтларра о произошедшем на "Надежде". - ]]; - obj = { - vway("Фаэтларр", "{Поговорить с Фаэтларром. ^}", "cutscene_phaetlarr_dlg"); - }; -}; \ No newline at end of file diff --git a/main.lua b/main.lua --- a/main.lua +++ b/main.lua @@ -27,7 +27,6 @@ dofile "warehouse18.lua" dofile "warehouse32.lua" dofile "leviathan.lua" dofile "london_dice.lua" -dofile "london_checkers.lua" -- Часть 2: Атлантида dofile "atlantis.lua" dofile "atlantis_ignis.lua" diff --git a/navjiarr_hostile_settlement.lua b/navjiarr_hostile_settlement.lua deleted file mode 100644 diff --git a/navjiarr_settlement.lua b/navjiarr_settlement.lua deleted file mode 100644 diff --git a/party.lua b/party.lua --- a/party.lua +++ b/party.lua @@ -28,12 +28,15 @@ char_learr = obj { follow = false; on_books = 0; + on_join = 0; + on_before = 0; + on_atlantis = 0; }; nam = "learr"; disp = "Леарр"; dsc = function(s) if (stead.nameof(where(s)) == s.home) then - return [[{Леарр} стоит возле одного из иллюминаторов и наблюдает за происходящим снаружи субмарины. ^]]; + return [[{Леарр} сидит в кресле, листая книгу. ^]]; else return [[{Леарр} ждет ваших указаний. ^]]; end; @@ -173,6 +176,32 @@ learr_home_dlg = dlg { disp = "Леарр"; hideinv = true; entered = function(s) + --on_books = 0; + --on_join = 0; + --on_before = 0; + --on_atlantis = 0; + poff("on_books", "on_join", "on_before", "on_atlantis", "talk"); + if (rel_learr < 0) then + pon("talk"); + else + --[[if (char_learr.on_books < 3) then + pon("on_books"); + pon("talk"); + end;]] + if (char_learr.on_join < 2) then + pon("on_join"); + pon("talk"); + end; + if (char_learr.on_before < 2) then + pon("on_before"); + pon("talk"); + end; + if (char_learr.on_atlantis < 2) then + pon("on_atlantis"); + pon("talk"); + end; + end; + if (atl_iyh_state == 7) then pon("on_iyh"); else @@ -187,11 +216,37 @@ learr_home_dlg = dlg { poff('stay'); end; + psub("generic"); return [[Леарр вопросительно смотрит на вас. ]]; end; phr = { + {tag="more_questions"}; + {tag="on_books", "", function() + + end}; + {tag="on_join", "Почему ты отправилась с нами?", function() + char_learr.on_join = 2; + return [[Леарр отвечает: "Я с-Уильямом-Дрейком-хотела-отправиться, но отец не-разрешил. Он сейчас-изменил-решение и я могу-с-тобой-искать". ]]; + end} + {tag="on_before", "Расскажи о своей жизни в Ираафаанотре.", function() + char_learr.on_before = 2; + return [[Леарр отвечает: "Я вождя-дочь. Я думать-искать-решать-сложно-но-интересно-было-училась. Хевьяры пришли-и-все-изменили. Я теперь-говорить-не-с-навьярами-учусь. Отец будущему-вождю-полезно-это-говорит. Я согласна-с-ним-в-этом".]]; + end} + {tag="on_atlantis", "Что ты думаешь об Атлантиде?", function() + char_learr.on_atlantis = 2; + return [[Леарр отвечает: "Мы многому-научиться-у-вас-должны-и-можем. Вы в-воде-не-дышите-как-мы, но вы машины-делающие-это-за-вас-строите. Легенды гласят, что мы тоже-это-умели, но почему-разучились? Я не умею. Отец не умеет. Другие не умеют. И в-книгах-не-написано". Леарр печально вздыхает. ]]; + end} + {tag="generic"}; + { tag = "talk", always = true, "Я хочу кое-что спросить.", function(s) + if rel_learr >= 0 then + psub("more_questions"); + return [[Леарр кивает: "Ты говори". ]]; + else + return [[Леарр отвечает: "Мы потом-поговорим". ]]; + end; + end}; { tag = "on_iyh", always = true, "Что ты можешь рассказать мне о храме?", [[ - "Каждый-храм два-входа-имеет. Большой-главный-вход далеко-виден. Тайный-задний-вход незаметен-но-всегда-есть. Мы давно-потеряли дорогу-к-этому-святилищу и задний-вход-не-помним. Если мы задний-вход-найдем, то обманим затмевающего-свет и в-храм-проникнем". + "Каждый-храм два-входа-имеет. Большой-главный-вход далеко-виден. Тайный-задний-вход незаметен-но-всегда-есть. Мы давно-потеряли дорогу-к-этому-святилищу и задний-вход-не-помним. Если мы задний-вход-найдем, то обманем затмевающего-свет и в-храм-проникнем". ]]}; { tag = "join", always = true, "Я хочу, чтобы ты пошла со мной в следующий раз", "Хорошо", function()