--[[ Дипатреанотр ]] global { dyp_quest_state = 0; -- 0 - не начат -- 1 - вождь попросил светящуюся капсулу с Атлантиды -- 2 - вождь попросил зуб акулы -- 3(1) - вождь попросил карту -- 4(2) - узнали, что карту унес Аэдиенрр в Дипатреанотр -- 5(3) - узнали, куда унес карту Аэдиенрр из Дипатреанотра -- 6(4) - Отдали оригинал КНО в Ираафаанотр -- 7(5) - Отдали жезл в Ираафаанотр dyp_stones_known = false; dyp_lib_stone_state = 0; }; --[[ Дипатреанотр город ]] dyp_entry = lcutscene("dyp_entry", "Левиафан, рубка", [[Дипатреанотр расположен всего в нескольких часах пути от Атлантиды. Как только вы прибываете на место, вашим глазам открывается картина неприглядного поселения -- небольшой деревушки, состоящей из не более чем сотни домов, сгрудившихся вокруг обелиска в центре, посреди которой возвышается каменный обелиск. Вы не замечаете никаких улиц, кроме одной, соединящей дом вождя с центральной площадью. Вы направляете Левиафан к центру и субмарина, послушная вашим указаниям, замирает рядом с обелиском. ]], "Вы прибыли в Дипатреанотр. ", leviathan_wheelhouse); dyp_center = room { nam = "Дипатреанотр, центр"; underwater = true; handwheel_room = "dyp_temple_navigation"; disp = "Дипатреанотр, центр"; view = [[Левиафан находится над центром Дипатреанотра -- небольшого навьярского поселения. Вокруг небольшой центральной площади неровными кругами расположены небольшие каменные дома. Явно выраженные улицы отсутствуют, за исключением широкой, выложенной камнем дороги от площади до дома вождя. В другом конце площади расположено большое здание библиотеки. ]]; dsc = [[Вы находитесь на центральной площади Дипатреанотра -- небольшого навьярского поселения. Вокруг небольшой центральной площади неровными кругами расположены небольшие каменные дома. Явно выраженные улицы отсутствуют, за исключением широкой, выложенной камнем дороги от площади до дома вождя. В другом конце площади расположено большое здание библиотеки. ]]; obj = { "dyp_obelisk"; }; entered = function(s) dyp_obelisk_puzzle.where_from = 'dyp_center'; if atl_rep_dyp < 0 then dypatreanotrr_night_found = true; return [[Вас встречают враждебные взгляды вооруженных навьяров. ]]; end; end; way = { kh_vroom("К библиотеке", function(s) if atl_rep_dyp < 0 then pr [[Группа вооруженных навьяров преграждает вам путь. ]]; return false; end; return "dyp_library_entrance"; end); kh_vroom("К дому вождя", function(s) if atl_rep_dyp < 0 then pr [[Группа вооруженных навьяров преграждает вам путь. ]]; return false; end; return "dyp_chief_house_entrance" end); kh_vroom("В Левиафан", "leviathan_airlock"); kh_vroom("К окраине", function(s) if atl_rep_dyp < 0 then pr [[Группа вооруженных навьяров преграждает вам путь. ]]; return false; end; return "dyp_outskirts" end); }; }; dyp_outskirts = room { nam = "Дипатреанотр, окраина"; underwater = true; disp = "Дипатреанотр, окраина"; dsc = [[Вы стоите на южной окраине Дипатреанотра. К северу от вас расположены неказистые каменные дома жителей города. Отсюда прекрасно виден зависший над центральной площадью Левиафан. Вдалеке на востоке вы смутно различаете высокий каменный обелиск. ]]; obj = { "dyp_guardian"; }; way = { kh_vroom("К обелиску", "dyp_center"); }; }; dyp_guardian = npc { nam = "dyp_guardian"; dsc = [[Рядом с вами неспешно прогуливается {стражник}, вооруженный копьем. Кажется, ваш вид его нисколько не удивляет и не беспокоит. ]]; phrases = function(s) if language_known then return { [[Стражник не обращает на вас внимания. ]]; [[По головным плавникам стражника бегут цветные полосы: "Ты говори с вождем, не со мной". ]]; }; else return { [[Стражник не обращает на вас внимания. ]]; [[По головным плавникам стражника бегут цветные полосы. К сожалению, вы не понимаете, что он пытается вам сказать. ]]; }; end; end; dlg = function(s) if dyp_quest_state == 4 then return "dyp_guardian_dlg"; end; end; }; dyp_guardian_dlg = dlg { nam = "dyp_guardian_dlg"; disp = "Стражник"; entered = function(s) if language_known then psub("speak"); return [[По головным плавникам стражника бегут цветные полосы: "Ты говори с вождем, не со мной". ]]; else psub("no_speak"); return [[По головным плавникам стражника бегут цветные полосы. К сожалению, вы не понимаете, что он пытается вам сказать. ]]; end; end; phr = { {tag="no_speak"}; {always = true; "[Уйти]", code [[ back(); ]]}; {tag="speak"}; {"[Кодировщик] Я ищу навьяра по имени Аэдиенрр. Он проходил здесь недавно.", [[Стражник кивает: "Аэдиенрр из Ираафаанотра ушел на восток несколько дней назад. Кажется, он направлялся к обелискам". ]], code [[ dyp_quest_state = 5; ]]}; {always = true; "[Уйти]", code [[ back(); ]]}; }; }; dyp_obelisk = obj { nam = "dyp_obelisk"; dsc = [[В центре площади стоит большой каменный {обелиск}, с нанесенными на него символами. ]]; act = function(s) if here() == dyp_center and atl_rep_dyp < 0 then return [[На обелиске, традиционно для навьяров, начертано название города и вырезана карта, указывающая путь к храму. ]]; end; if dyp_stones_known then p [[У самого основания обелиска вы видите небольшое изображение, вырезанное в камне. Некогда оно было разрезано на шестнадцать частей, а части перепутаны между собой. ]]; walkin("dyp_obelisk_puzzle"); else return [[На обелиске, традиционно для навьяров, начертано название города и вырезана карта, указывающая путь к храму. ]]; end; end; }; dyp_obelisk_puzzle = room { var { state = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11, 12,13,14,15 }; set = false; where_from = ''; }; win = ""; nam = "Дипатреанотр, центр"; nosave = true; noautosave = true; underwater = true; not_follow = true; entered = function(s) if not s.set then s.set = true; local details = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; local k = 0; for i = 1, 16 do local item; local index; index = rnd(#details); item = details[index]; table.remove(details, index); s.state[i] = item; if item == 12 then k = math.floor(i / 4) + 1; end; end; for i = 1, 16 do if s.state[i] ~= 12 then for j = i + 1, 16 do if s.state[j] ~= 12 then local si = s.state[i]; local sj = s.state[j]; if si > 12 then si = si - 1; end; if sj > 12 then sj = sj - 1; end; if si > sj then k = k + 1; end; end; end; end; end; if k % 2 == 1 then for i = 16, 1, -1 do if s.state[i] == 14 then s.state[i] = 15; elseif s.state[i] == 15 then s.state[i] = 14; end; end; end; end; end; pic = function(s) local p = 'images/dyp15.png'; for i = 1, #s.state do local f = s.state[i]; p = p .. ';images/dyp15_' .. tostring(f) .. '.png@' .. tostring(math.floor((i - 1) % 4) * 40) .. ',' .. tostring(math.floor((i - 1) / 4) * 40); end; return p; end; dsc = [[У самого основания обелиска вы видите небольшое изображение, вырезанное в камне. Оно разрезано на шестнадцать частей, а части перепутаны между собой. ]]; click = function(s, x, y) local tx = math.floor(x / 40); local ty = math.floor(y / 40); local tile = tx + ty * 4 + 1; if (s.state[tile] ~= 12) then if (tile - 4 > 0) and s.state[tile - 4] == 12 then tx = s.state[tile]; s.state[tile] = s.state[tile - 4]; s.state[tile - 4] = tx; elseif tx > 0 and s.state[tile - 1] == 12 then tx = s.state[tile]; s.state[tile] = s.state[tile - 1]; s.state[tile - 1] = tx; elseif tx < 3 and s.state[tile + 1] == 12 then tx = s.state[tile]; s.state[tile] = s.state[tile + 1]; s.state[tile + 1] = tx; elseif (tile + 4) <= 16 and s.state[tile + 4] == 12 then tx = s.state[tile]; s.state[tile] = s.state[tile + 4]; s.state[tile + 4] = tx; end; end; local f = ""; for i = 1, #s.state do f = f .. "," .. tostring(s.state[i]); end; if not s:check_win() then walkin(here()); else p [[Одна из каменных плит рядом с обелиском отодвигается. В образовавшейся выемке вы видите небольшой светящийся красным светом камень. Вы забираете камень себе. ]]; put(dyp_item_stone_red, pl); walk(s.where_from); end; end; check_win = function(s) for i = 1, #s.state do if s.state[i] ~= i - 1 then return false; end; end; return true; end; way = { kh_vroom("Назад", function(s) return dyp_obelisk_puzzle.where_from; end); }; }; dyp_navjiarr = npc{ nam = "dyp_navjiarr"; dsc = [[Немногие {навьяры}, находящиеся сейчас на площади с интересом оглядываютс на Левиафан и вас. ]]; phrases = { "Не стоит их беспокоить. ", "Вряд ли они смогут сказать вам что-то полезное. " }; }; dyp_library_entrance = room { nam = "Дипатреанотр, вход в библиотеку"; underwater = true; dsc = [[Двухэтажное здание библиотеки разительно отличается от большинства строений Дипатреанотра. Выстроенное из массивных каменных плит, а не из булыжников, как остальные, оно хорошо сохранилось несмотря на достаточно большой возраст. Ровные стены тщательно очищаются навьярами от ила и водорослей, сохрнаяя здание в первозданном виде. ]]; way = { kh_vroom("К обелиску", "dyp_center"); kh_vroom("В библиотеку", "dyp_library_floor1"); }; }; dyp_library_floor1 = room { nam = "Дипатреанотр, библиотека, первый этаж"; underwater = true; dsc = [[Первый этаж здания библиотеки представляет собой огромный зал. Множество колонн, установленных ровными рядами, поддерживают потолок, между ними и вдоль стен установлены массивные стеллажи, заполненные различными записями. Большинство их сделаны на каменных табличках, но изредка встречаются и древние металлические. Ваше внимание привлекает одна из полок, заполненная небольшими блестящими дисками из неизвестного материала. ]]; obj = { "dyp_library_statue" }; way = { kh_vroom("Наружу", "dyp_library_entrance"); kh_vroom("На второй этаж", "dyp_library_floor2"); }; }; dyp_library_floor2 = room { nam = "Дипатреанотр, библиотека, второй этаж"; underwater = true; dsc = [[Второй этаж библиотеки мало чем отличается от первого -- точно такие же колонны, точно такие же стеллажи. Здесь гораздо больше полок содержат блестящие диски и металлические таблички. ]]; obj = { "dyp_librarian"; }; way = { kh_vroom("На первый этаж", "dyp_library_floor1"); }; }; dyp_librarian = npc { var { state = 0; }; nam = "dyp_librarian"; dsc = function(s) if s.state == 0 then return [[Перед вами на полу сидит {навьяр}. Вокруг него разложены какие-то записи, которые он рассматривает, время от времени перекладывая с места на место. ]]; else return [[Перед вами на полу сидит {Эйлехиарр}. Вокруг него разложены какие-то записи, которые он рассматривает, время от времени перекладывая с места на место. ]]; end; end; dlg = "dyp_librarian_dlg"; }; dyp_librarian_dlg = dlg { var { lse = false; state = 0; }; nam = "dyp_librarian_dlg"; disp = "Эйлехиарр"; entered = function(s) if atl_iyh_state == 10 and not s.lse then s.lse = true; pon("lse"); end; if language_known then psub("speak"); if (dyp_librarian_dlg.state == 0) then dyp_librarian_dlg.state = 1; return [[Перед вами, прямо на полу сидит навьяр. Рядом с ним разложены какие-то записи, которые он внимательно рассматривает, иногда перекладывая с места на место. Заметив вас, он поднимается и приветствует вас: "Я, Эйлехиарр из Дипатреанотра, приветствую тебя хевьяр. Говори, я слушаю". ]]; else return [[Эйлехиарр сидит на полу, перекладывая какие-то записи. Заметив вас он поднимается и приветствует вас: "Говори, я слушаю". ]]; end; else psub("no_speak"); return [[Перед вами, прямо на полу сидит навьяр. Рядом с ним разложены какие-то записи, которые он внимательно рассматривает, иногда перекладывая с места на место. Заметив вас, он поднимается. По плавникам на его голове начинают бежать цветные полосы, но вы не понимаете, что он хочет вам сказать. ]]; end; end; phr = { {tag="no_speak"}; {always=true, "[Уйти]", code [[ back(); ]]}; {tag="speak"}; {"[Кодировщик] Что ты делаешь?", [[Эйлехиарр отвечает: "Эти записи сильно повреждены. К счастью у нас есть несколько копий этого текста. Но мои предшественники умудрились испортить все три!" ]]}; {tag="lse", false, "[Кодировщик] Я ищу карту пути в Лсэрианотр.", [[Эйлехиарр задумчиво оглядывает помещение. Делает несколько шагов в одну сторону, потом в другую. Садится рядом со своими записями, снова встает. Наконец, он берет с одной из полок металлическую табличку и сообщает: "Здесь говорится о пещере рядом с храмом. Три ключа закрывают вход". ]], code [[pon("three_keys");]]}; {tag="three_keys", false, "[Кодировщик] Где найти эти ключи?", [[Эйлехиарр отвечает: "Здесь, в Дипатреанотре. Один ты можешь забрать внизу, у статуи". ]], code [[ dyp_stones_known = true; dyp_lib_stone_state = 1; ]]}; {always=true, "[Кодировщик] Я пойду.", [[Эйлехиарр прощается: "Ты возвращайся". ]], code [[ back(); ]]}; }; }; dyp_item_stone_blue = obj { nam = "dyp_item_stone_blue"; disp = [[Синий камень]]; inv = [[Небольшой круглый камень, излучающий яркий синий свет. ]]; }; dyp_item_stone_green= obj { nam = "dyp_item_stone_green"; disp = [[Зеленый камень]]; inv = [[Небольшой круглый камень, излучающий яркий зеленый свет. ]]; }; dyp_item_stone_red = obj { nam = "dyp_item_stone_red"; disp = [[Красный камень]]; inv = [[Небольшой круглый камень, излучающий яркий красный свет. ]]; }; dyp_item_wand = obj { nam = "dyp_item_wand"; disp = "Жезл"; inv = [[Жезл из неизвестного металла, покрытый навьярскими письменами. ]]; }; dyp_library_statue = obj { nam = "dyp_library_statue"; dsc =function(s) if dyp_lib_stone_state > 1 then return [[В центре зала стоит статуя навьяра. В правой руке он держит табличку, которую сосредоточенно рассматривает. Левая рука статуи выглядит так, словно в ней должен находиться какой-то небольшой предмет, однако он отсутствует. ]]; else return [[В центре зала стоит статуя навьяра. В правой руке он держит табличку, которую сосредоточенно рассматривает. В левой руке статуи лежит небольшой светящийся синий {камень}. ]]; end; end; act = function(s) if dyp_lib_stone_state == 0 then return [[Красивая старая статуя. Навьяр изображен пораительно подробно -- вы можете разглядеть каждую чешуйку. Небольшой камень лежит в руке статуи так, что его очень легко вынуть. ]]; elseif dyp_lib_stone_state == 1 then dyp_lib_stone_state = 2; take("dyp_item_stone_blue"); return [[Вы легко вынимаете камень из руки статуи. ]]; elseif dyp_lib_stone_state == 2 then return [[Красивая старая статуя. Навьяр изображен пораительно подробно -- вы можете разглядеть каждую чешуйку. ]]; end; end; }; dyp_chief_house_entrance = room { nam = "Дипатреанотр, перед домом вождя"; underwater = true; disp = "Дипатреанотр, перед домом вождя"; dsc = [[Дом вождя Дипатреанотра не уступает размерами библиотеке. Двухэтажное здание очевидно не раз расширялось и достраивалось. Часть его сложена из обработанных каменных плит, другая -- из булыжников, как большинство зданий города. Широкая выложенная камнем улица ведет отсюда к центральной площади города.]]; way = { kh_vroom("К обелиску", "dyp_center"); kh_vroom("В дом", "dyp_chief_house"); }; }; dyp_chief_house = room { nam = "Дипатреанотр, дом вождя"; underwater = true; disp = "Дипатреанотр, дом вождя"; dsc = [[Приемная дома вождя представляет собой огромный зал с ровными рядами стройных каменных колонн, удерживающих потолок. В дальнем конце зала установлен каменный трон, перед которым установлен массивный каменный стол. ]]; way = { kh_vroom("Наружу", "dyp_chief_house_entrance"); }; obj = { "dyp_chief"; }; }; dyp_chief = npc { var { wand = false; }; nam = "dyp_chief"; dsc = function(s) if s.wand then return [[{Вождь Дипатреанотра} сидит на троне с закрытыми глазами. Руки его лежат на колянях. Светло-синяя чешуя покрыта узором из татуировок. Как и другие навьяры он одет в костюм из водорослей. На левой руке дремлюего вождя вы видите искусный браслет из блестящего металла. ]]; else return [[{Вождь Дипатреанотра} сидит на троне с закрытыми глазами. Руки его лежат на колянях. В правой он держит небольшой золотистый жезл, в навершии которого укреплен круглый камень, излучающий яркий зеленый свет. Светло-синяя чешуя покрыта узором из татуировок. Как и другие навьяры он одет в костюм из водорослей. На левой руке дремлюего вождя вы видите искусный браслет из блестящего металла. ]]; end; end; dlg = "dyp_chief_dlg"; }; dyp_chief_dlg = dlg { var { lse = false; aed = false; }; nam = "dyp_chief_dlg"; disp = "Вождь Дипатреанотра"; entered = function(s) if not language_known then psub("no_speak"); return [[Как только вы приближаетесь к столу, глаза вождя открываются. Он поднимается с трона. Руки его остаются сложенными на груди, а взгляд его желтых глаз устремляется на вас. По его головным плавникам бегут цветные полосы. К сожалению, вы не понимаете, что он пытается вам сказать. ]]; else psub("speak"); if atl_iyh_state == 10 and not s.lse then s.lse = true; pon("lseryanotrr"); end; if dyp_quest_state == 1 and have(item_electric_lamp, pl) and item_electric_lamp.state == 2 then pon("quest1"); end; if dyp_quest_state == 2 and have(item_shark_tooth, pl) then pon("quest2"); end; if dyp_stones_known and dyp_quest_state == 0 then pon("quest"); end; poff("quest3"); if have(dyp_item_star_map_copy) or have(dyp_item_star_map) then pon("quest3"); end; if dyp_quest_state == 4 and not s.aed then s.aed = true; pon("aedienrr"); end; return [[Как только вы приближаетесь к столу, глаза вождя открываются. Он поднимается с трона. Руки его остаются сложенными на груди, а взгляд его желтых глаз устремляется на вас. По его головным плавникам бегут цветные полосы: "Чем скромные навьяры из Дипатреанотра обязаны визиту почтенного хевьяра? Ты говори". ]]; end; end; phr = { {tag="no_speak"}; {always=true, "[Уйти]", code [[ back(); ]]}; {tag="speak"}; {tag="lseryanotrr", false, "[Кодировщик] Я ищу карту пути в Лсэрианотр.", [[Вождь отвечает: "Не мое дело следить за этим. Ты спроси в храме или в библиотеке". ]]}; {tag="quest", false, "[Кодировщик] Мне нужен камень из твоего жезла. Что я могу предложить в обмен на него?", [[Глаза вождя загораются, он ухмыляется. По плавникам быстро, словно в нетерпении бегут цветные полосы: "Принеси мне три вещи, что я попрошу и получишь жезл вместе с камнем". ]], code [[psub("agree_quest");]]}; {tag="quest1", false, "[Отдать светильник] [Кодировщик] Вот то, что ты просил. Что тебе еще нужно?", [[Вождь с интересом рассматривает принесенный вами прибор, после чего ставит его на стол перед собой и говорит: "Еще мне нужен акулий зуб". ]], code [[ remove("item_electric_lamp", pl); dyp_quest_state = 2; ]]}; {tag="quest2", false, "[Отдать зуб акулы] [Кодировщик] Вот то, что ты просил. Что тебе еще нужно?", [[Вождь кладет зуб на стол рядом со светильником и говорит: "Я хочу карту небесных огней из Ираафаанотра. Принеси ее и забирай этот жезл вместе с камнем". ]], code [[ remove("item_shark_tooth", pl); dyp_quest_state = 3; psub("agree_quest2"); ]]}; {tag="quest3", false, "[Отдать карту небесных огней] Вот то, что ты просил. Я могу забрать камень?", function(s) dyp_chief.wand = true; if have(dyp_item_star_map_copy) then remove(dyp_item_aedienrr_notes, me()); remove(dyp_item_star_map_copy, me()); else remove(dyp_item_aedienrr_notes, me()); remove(dyp_item_star_map, me()); atl_rep_iraa = atl_rep_iraa - 1; end; dyp_map = true; take(dyp_item_stone_green); atl_rep_dyp = atl_rep_dyp + 1; return [[Вождь отдает вам свой жезл со словами: "Благодарю тебя, честный хевьяр и держу свое слово". ^Вы достаете из жезла камень и возвращаете жезл вождю. ]]; end}; {tag="aedienrr", false, "[Кодировщик] Ваш город посещал Аэдиенрр из Ираафаанотра недавно?", [[Вождь отвечает: "Не мое дело следить за этим. Спроси у стражников". ]]}; {always=true, "[Кодировщик] Я пойду.", [[Вождь прощается с вами: "Ты возвращайся". Он садится обратно на трон и закрывает глаза. ]], code [[ back(); ]]}; {tag="agree_quest"}; {always=true,"[Кодировщик] Что ты хочешь, чтобы я принес?", [[Вождь отвечает: "Первая вещь, что мне нужна -- это светящаяся капсула из вашего города". ]], code [[ dyp_quest_state = 1; pret(); ]]}; {always=true,"[Кодировщик] Я передумал. ", [[Вождь пожимает плечами. ]], code [[ pon("quest"); pret(); ]]}; {tag="agree_quest2"}; {always=true,"[Кодировщик] Как к этому отнесутся в Ираафаанотре?", [[Вождь отвечает: "Они могут быть против. Уговори их". ]], code [[ pret(); ]]}; {always=true,"[Кодировщик] Я не буду этого делать.", [[Вождь отвечает: "Я отдам посох только за карту небесных огней". ]], code [[ pret(); ]]}; }; }; --[[ Дипатреанотр храм ]] dyp_temple_entry = lcutscene("dyp_temple_entry", "Левиафан, рубка", [[Храм Дипатреанотра располагается в нескольких часах пути от Атлантиды на Левиафане. К массивным дверям храма, вырезанным в толще скалы, ведет широкая каменная лестница, некогда украшенная резными орнаментами, ныне осыпавшимися и раскрошившимися. Над входом вырезано изображение, состоящее из нескольких концентрических кругов и каких-то символов. ]], "Вы прибыли в Храм Дипатреанотра. ", leviathan_wheelhouse); dyp_temple_guard = npc { nam = "ctt_dyp_temple_guard"; dsc = [[У ворот стоят два навьяра, вооруженные копьями. При вашем приближении они начинают нервничать -- переглянувшись, они перехватывают копья, готовясь при необходимости прогнать вас. ]]; phrases = function(s) if language_known then phrases = { [[По плавникам стражника бегут цветные полосы: темно-фиолетовая, зеленая, оранжевая -- шире чем остальные, серая, ярко-розовая, желтая -- снова широкая, салатовая, снова широкая желтая и, наконец, широкая бледно-оранжевая. Он просит вас уходить. ]]; [[Стражник не реагирует на ваши попытки начать общение. ]]; }; else phrases = { [[По плавникам стражника бегут цветные полосы: темно-фиолетовая, зеленая, оранжевая -- шире чем остальные, серая, ярко-розовая, желтая -- снова широкая, салатовая, снова широкая желтая и, наконец, широкая бледно-оранжевая. ]]; [[Стражник не реагирует на ваши попытки начать общение. ]]; }; end; end; }; dyp_temple_carving_look = cutscene('Храм Дипатреанотра, вход', 'Храм Дипатреанотра, вход', [[Над входом в храм вырезана схема, состоящая из нескольких концентрических кругов. Часть схемы полностью стерлась от времени. ]], 'dyp_temple_entrance', nil, 'images/iyh_navjiarr_map.png') dyp_temple_carving = obj { nam = "dyp_temple_carving"; dsc = [[Над входом в храм вырезано {изображение} состоящее из нескольких кругов и еще каких-то символов. Часть изображения стерлась от времени, однако остальная часть все еще читаема. ]]; act = function(s) walkin("dyp_temple_carving_look"); end; }; dyp_temple_entrance = room { nam = "Храм Дипатреанотра, вход"; dsc = [[Перед вами находится вырезанный в скале вход в навьярский храм. Массивные каменные ступени ведут к громадным двустворчатым дверям, украшенным полустершимися орнаментами. Некогда яркие краски потускнели -- осторожные навьяры не решаются их обновить. ^Скала продолжается на восток и на юго-запад от храма. Вдалеке на севере видны длинные, вытянувшиеся на несколько метров вверх водоросли. К северо-западу заметен каменный обелиск. ]]; view = [[Через иллюминаторы вы видите вырезанный в скале вход в навьярский храм. Массивные каменные ступени ведут к громадным двустворчатым дверям, украшенным полустершимися орнаментами. Некогда яркие краски потускнели -- осторожные навьяры не решаются их обновить. ^Скала продолжается на восток и на юго-запад от храма. Вдалеке на севере видны длинные, вытянувшиеся на несколько метров вверх водоросли. К северо-западу заметен каменный обелиск. ]]; underwater = true; handwheel_room = 'dyp_temple_navigation'; obj = { "dyp_temple_guard"; "dyp_temple_carving"; }; way = { kh_vroom("В храм", function(s) pr('Охранники не колеблясь убьют вас, если вы попытаетесь войти. '); return false; end):disable(); kh_vroom("В Левиафан", "leviathan_airlock"); }; }; dyp_temple_east = room { nam = "Океан"; view = [[Вы находитесь у подножья скалы, протянувшейся на многие километры на восток от вас. На западе она сворачивает к югу. В освещенной мощным прожектором Левиафана скале вы видите раверзшуюся пасть пещеры. ]]; dsc = [[Вы находитесь у подножья скалы, протянувшейся на многие километры на восток от вас. На западе она сворачивает к югу. Перед собой вы видите разверзшуюся пасть пещеры. ]]; underwater = true; handwheel_room = 'dyp_temple_navigation'; way = { kh_vroom("В пещеру", "dyp_temple_cave_entrance"); kh_vroom("В Левиафан", "leviathan_airlock"); }; }; dyp_temple_south_west = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Вы находитесь у подножья скалы. К юго-западу от вас скала сворачивает на юг и тянется на многие километры. К северо-востоку вы видите храм Дипатреанотра. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_south_far = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Вы находитесь у подножья скалы, протянувшейся на многие километры на юг. На севере скала сворачивает к востоку. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_north_west = room { nam = "Океан"; no_exit = function(s) if dyp_quest_state ~= 5 then return [[Нет смысла покидать Левиафан здесь. ]]; end; end; underwater = true; handwheel_room = 'dyp_temple_navigation'; view = [[Перед вами возвышается массивный каменный обелиск. Некогда он был украшен резными орнаментами, но сейчас все они практически полностью стерлись. К юго-востоку от вас возвышается отвесная скала, протянувшаяся на многие километры с юга на восток. Вдалеке на западе вы видите каменные строения навьярского города -- Дипатреанотра. ]]; dsc = [[К юго-востоку от вас возвышается отвесная скала, протянувшаяся на многие километры с юга на восток. Вдалеке на западе вы видите каменные строения навьярского города -- Дипатреанотра. ]]; obj = { "dyp_temple_west_footprints"; "dyp_temple_north_west_obelisk"; }; way = { kh_vroom("В Левиафан", "leviathan_airlock"); }; }; dyp_temple_west_footprints = obj { nam = "dyp_temple_west_footprints"; dsc = [[На илистом дне вы видите {следы}. ]]; act = [[Следы навьяра ведут на север. ]]; }; dyp_temple_north_west_obelisk = obj { nam = "dyp_temple_north_west_obelisk"; dsc = [[Перед вами возвышается массивный каменный {обелиск}. Некогда он был украшен резными орнаментами, но сейчас все они практически полностью стерлись. ]]; act = [[Древняя каменная конструкция, с неизвестной целью помещенная в этом месте. ]]; }; dyp_temple_north = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Левиафан застыл над высокими стеблями водорослей, едва заметно колышущимися в спокойной воде. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_crevice_middle = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. На юге вы видите длинные стебли водорослей, поднимающиеся на несколько метров над землей. Вдалеке на севере протянулась параллельно ущелью высокая отвесная скала. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_crevice_east = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. На юго-западе вы видите длинные стебли водорослей, поднимающиеся на несколько метров над землей. Вдалеке на севере протянулась параллельно ущелью высокая отвесная скала. На северо-востоке вы видите огромный скелет кита, с незапамятных времен покоящийся там. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_crevice_far_east = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. На севере вы видите огромный скелет кита, с незапамятных времен покоящийся там. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_crevice_west = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. На юго-востоке вы видите длинные стебли водорослей, поднимающиеся на несколько метров над землей. На северо-западе возвышается каменный обелиск, а еще дальше на севере параллельно ущелью протянулась высокая отвесная скала. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_crevice_far_west = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Левиафан застыл над неглубоким ущельем, протянувшимся с востока на запад. Вдалеке на севере и на юге от вас возвышаются каменные обелиски. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_warning = room { nam = "Океан"; no_exit = function(s) if dyp_quest_state ~= 5 then return [[Нет смысла покидать Левиафан здесь. ]]; end; end; view = [[Перед вами возвышается массивный каменный обелиск. Большая часть изображенного на нем стерлась. ]]; dsc = [[Вы находитесь посреди бескрайней илистой равнины. К северу вы видите скалу, протянувшуюся с запада на восток. К югу вы видите глубокое ущелье, протянувшееся параллельно скале. ]]; underwater = true; handwheel_room = 'dyp_temple_navigation'; way = { kh_vroom("В Левиафан", "leviathan_airlock"); }; obj = { "dyp_temple_obelisk_footprints"; "dyp_temple_warning_obelisk"; }; }; dyp_temple_obelisk_footprints = obj { nam = "dyp_temple_obelisk_footprints"; dsc = [[На илистом дне вы видите {следы}. ]]; act = [[Следы навьяра ведут на север. ]]; }; dyp_temple_warning_obelisk = obj { nam = "dyp_temple_warning_obelisk"; dsc = [[Перед вами возвышается массивный каменный {обелиск}. Некогда он был украшен резными орнаментами, но сейчас все они практически полностью стерлись. ]]; act = [[Древняя каменная конструкция, с неизвестной целью помещенная в этом месте. ]]; }; dyp_temple_cliff_1 = room { nam = "Океан"; no_exit = function(s) if dyp_quest_state ~= 5 then return [[Нет смысла покидать Левиафан здесь. ]]; end; end; view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. Здесь в скале вы видите вход в глубокую темную пещеру. К юго-востоку от вас возвышается каменный обелиск. ]]; underwater = true; handwheel_room = 'dyp_temple_navigation'; way = { kh_vroom("В Левиафан", "leviathan_airlock"); kh_vroom("В пещеру", "dyp_crab_cave"); }; obj = { "dyp_temple_cliff_1_footprints"; }; }; dyp_temple_cliff_1_footprints = obj { nam = "dyp_temple_cliff_1_footprints"; dsc = [[На илистом дне хорошо сохранились {следы} множества тонких ног. ]]; act = [[Следы множества тонких ног, тянущиеся с востока, ведут в пещеру. ]]; }; dyp_temple_cliff_2 = room { nam = "Океан"; no_exit = function(s) if dyp_quest_state ~= 5 then return [[Нет смысла покидать Левиафан здесь. ]]; end; end; view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. Вдалеке на юге возвышается каменный обелиск. ]]; dsc = [[Вы стоите у подножия высокой скалы, протянувшейся с востока на запад к северу от вас. К югу от вас возвышается каменный обелиск. ]]; handwheel_room = 'dyp_temple_navigation'; underwater = true; way = { kh_vroom("В Левиафан", "leviathan_airlock"); }; obj = { "dyp_temple_cliff_2_footprints"; }; }; dyp_temple_cliff_2_footprints = obj { nam = "dyp_temple_cliff_2_footprints"; dsc = [[Здесь {следы} навьяра обрываются. ]]; act = [[Следы обрываются, но не просто так. Здесь явно произошла драка, скорее всего с каким-то морским животным. Вы замечаете следы множества тонких ног, ведущие на запад. ]]; }; dyp_temple_cliff_3 = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. Вдалеке на юго-западе возвышается каменный обелиск. ]]; view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. К юго-западу от вас возвышается каменный обелиск. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_cliff_4 = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. Вдалеке на юге вы видите ущелье, протянувшееся параллельно скале. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_cliff_5 = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Вы находитесь к югу от высокой скалы, протянувшейся с востока на запад. Вдалеке на юге вы видите ущелье, протянувшееся параллельно скале. На юго-востоке вы видете скелет кита, покоящийся здесь многие десятилетия. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_whale = room { nam = "Океан"; no_exit = [[Нет смысла покидать Левиафан здесь. ]]; view = [[Рядом с вами покоится скелет громадного кита. Древние кости занесены илом, однако все еще прекрасно видны с большого расстояния. На севере вы видите вырезанный в скале вход в древний навьярский храм. На юге глубокое ущелье протянулось с востока на запад. ]]; handwheel_room = 'dyp_temple_navigation'; }; dyp_temple_navigation = dlg { nam = "Штурвал Левиафана"; entered = function(s) psub(stead.deref(where(submarine_leviathan))); return where(submarine_leviathan).view; end; phr = { {tag="dyp_temple_entrance"}; {always=true, "[На восток, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_east"); psub("dyp_temple_east"); return where(submarine_leviathan).view; end}; {always=true, "[На северо-восток, к зарослям]", function() move(submarine_leviathan, "dyp_temple_north"); psub("dyp_temple_north"); return where(submarine_leviathan).view; end}; {always=true, "[На северо-запад, к обелиску]", function() atl_navjiarr_obelisks_seen = true; move(submarine_leviathan, "dyp_temple_north_west"); psub("dyp_temple_north_west"); return where(submarine_leviathan).view; end}; {always=true, "[На юго-запад, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_south_west"); psub("dyp_temple_south_west"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_east"}; {always=true, "[На запад, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_entrance"); psub("dyp_temple_entrance"); return where(submarine_leviathan).view; end}; {always=true, "[На север, к зарослям]", function() move(submarine_leviathan, "dyp_temple_north"); psub("dyp_temple_north"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_south_west"}; {always=true, "[На северо-восток, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_entrance"); psub("dyp_temple_entrance"); return where(submarine_leviathan).view; end}; {always=true, "[На юг, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_south_far"); psub("dyp_temple_south_far"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_south_far"}; {always=true, "[На север, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_south_west"); psub("dyp_temple_south_west"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_north_west"}; {always=true, "[На север, к ущелью]", function() move(submarine_leviathan, "dyp_temple_crevice_far_west"); psub("dyp_temple_crevice_far_west"); return where(submarine_leviathan).view; end}; {always=true, "[На юго-восток, к храму]", function() move(submarine_leviathan, "dyp_temple_entrance"); psub("dyp_temple_entrance"); return where(submarine_leviathan).view; end}; {always=true, "[На запад, в Дипатреанотр]", function() dypatreanotrr_found = true; move(submarine_leviathan, "dyp_center"); psub("dyp_center"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_north"}; {always=true, "[На юго-запад, к храму]", function() move(submarine_leviathan, "dyp_temple_entrance"); psub("dyp_temple_entrance"); return where(submarine_leviathan).view; end}; {always=true, "[На юг, к скале]", function() move(submarine_leviathan, "dyp_temple_east"); psub("dyp_temple_east"); return where(submarine_leviathan).view; end}; {always=true, "[На север, к ущелью]", function() move(submarine_leviathan, "dyp_temple_crevice_middle"); psub("dyp_temple_crevice_middle"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_crevice_middle"}; {always=true, "[На юг, к зарослям]", function() move(submarine_leviathan, "dyp_temple_north"); psub("dyp_temple_north"); return where(submarine_leviathan).view; end}; {always=true, "[На восток, вдоль ущелья]", function() move(submarine_leviathan, "dyp_temple_crevice_east"); psub("dyp_temple_crevice_east"); return where(submarine_leviathan).view; end}; {always=true, "[На север, к скале]", function() move(submarine_leviathan, "dyp_temple_cliff_4"); psub("dyp_temple_cliff_4"); return where(submarine_leviathan).view; end}; {always=true, "[На запад, вдоль ущелья]", function() move(submarine_leviathan, "dyp_temple_crevice_west"); psub("dyp_temple_crevice_west"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_crevice_east"}; {always=true, "[На юго-запад, к зарослям]", function() move(submarine_leviathan, "dyp_temple_north"); psub("dyp_temple_north"); return where(submarine_leviathan).view; end}; {always=true, "[На восток, вдоль ущелья]", function() move(submarine_leviathan, "dyp_temple_crevice_far_east"); psub("dyp_temple_crevice_far_east"); return where(submarine_leviathan).view; end}; {always=true, "[На северо-восток, к скелету]", function() move(submarine_leviathan, "dyp_temple_whale"); psub("dyp_temple_whale"); return where(submarine_leviathan).view; end}; {always=true, "[На север, к скале]", function() move(submarine_leviathan, "dyp_temple_cliff_5"); psub("dyp_temple_cliff_5"); return where(submarine_leviathan).view; end}; {always=true, "[На запад, вдоль ущелья]", function() move(submarine_leviathan, "dyp_temple_crevice_middle"); psub("dyp_temple_crevice_middle"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_crevice_far_east"}; {always=true, "[На север, к скелету]", function() move(submarine_leviathan, "dyp_temple_whale"); psub("dyp_temple_whale"); return where(submarine_leviathan).view; end}; {always=true, "[На запад, вдоль ущелья]", function() move(submarine_leviathan, "dyp_temple_crevice_east"); psub("dyp_temple_crevice_east"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_crevice_west"}; {always=true, "[На север, к скале]", function() move(submarine_leviathan, "dyp_temple_cliff_3"); psub("dyp_temple_cliff_3"); return where(submarine_leviathan).view; end}; {always=true, "[На восток, вдоль ущелья]", function() move(submarine_leviathan, "dyp_temple_crevice_middle"); psub("dyp_temple_crevice_middle"); return where(submarine_leviathan).view; end}; {always=true, "[На юго-восток, к зарослям]", function() move(submarine_leviathan, "dyp_temple_north"); psub("dyp_temple_north"); return where(submarine_leviathan).view; end}; {always=true, "[На запад, вдоль ущелья]", function() move(submarine_leviathan, "dyp_temple_crevice_far_west"); psub("dyp_temple_crevice_far_west"); return where(submarine_leviathan).view; end}; {always=true, "[На северо-запад, к обелиску]", function() atl_navjiarr_obelisks_seen = true; move(submarine_leviathan, "dyp_temple_warning"); psub("dyp_temple_warning"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_crevice_far_west"}; {always=true, "[На север, к обелиску]", function() atl_navjiarr_obelisks_seen = true; move(submarine_leviathan, "dyp_temple_warning"); psub("dyp_temple_warning"); return where(submarine_leviathan).view; end}; {always=true, "[На восток, вдоль ущелья]", function() move(submarine_leviathan, "dyp_temple_crevice_west"); psub("dyp_temple_crevice_west"); return where(submarine_leviathan).view; end}; {always=true, "[На юг, к обелиску]", function() atl_navjiarr_obelisks_seen = true; move(submarine_leviathan, "dyp_temple_north_west"); psub("dyp_temple_north_west"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_warning"}; {always=true, "[На север, к скале]", function() move(submarine_leviathan, "dyp_temple_cliff_2"); psub("dyp_temple_cliff_2"); return where(submarine_leviathan).view; end}; {always=true, "[На юг, к ущелью]", function() move(submarine_leviathan, "dyp_temple_crevice_far_west"); psub("dyp_temple_crevice_far_west"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_cliff_1"}; {always=true, "[На восток, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_cliff_2"); psub("dyp_temple_cliff_2"); return where(submarine_leviathan).view; end}; {always=true, "[На юго-восток, к обелиску]", function() atl_navjiarr_obelisks_seen = true; move(submarine_leviathan, "dyp_temple_warning"); psub("dyp_temple_warning"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_cliff_2"}; {always=true, "[На восток, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_cliff_3"); psub("dyp_temple_cliff_3"); return where(submarine_leviathan).view; end}; {always=true, "[На юг, к обелиску]", function() atl_navjiarr_obelisks_seen = true; move(submarine_leviathan, "dyp_temple_warning"); psub("dyp_temple_warning"); return where(submarine_leviathan).view; end}; {always=true, "[На запад, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_cliff_1"); psub("dyp_temple_cliff_1"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_cliff_3"}; {always=true, "[На восток, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_cliff_4"); psub("dyp_temple_cliff_4"); return where(submarine_leviathan).view; end}; {always=true, "[На юг, к ущелью]", function() move(submarine_leviathan, "dyp_temple_crevice_west"); psub("dyp_temple_crevice_west"); return where(submarine_leviathan).view; end}; {always=true, "[На юго-запад, к обелиску]", function() atl_navjiarr_obelisks_seen = true; move(submarine_leviathan, "dyp_temple_warning"); psub("dyp_temple_warning"); return where(submarine_leviathan).view; end}; {always=true, "[На запад, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_cliff_2"); psub("dyp_temple_cliff_2"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_cliff_4"}; {always=true, "[На восток, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_cliff_5"); psub("dyp_temple_cliff_5"); return where(submarine_leviathan).view; end}; {always=true, "[На юг, к ущелью]", function() move(submarine_leviathan, "dyp_temple_crevice_middle"); psub("dyp_temple_crevice_middle"); return where(submarine_leviathan).view; end}; {always=true, "[На запад, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_cliff_3"); psub("dyp_temple_cliff_3"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_cliff_5"}; {always=true, "[На восток, вдоль скалы]", function() temple_found = true; move(submarine_leviathan, "iyh_far_from_entrance_foot"); lifeoff(iyh_far_from_entrance); atl_iyh_shockfish_away = 0; walk("iyh_far_from_entrance"); return where(submarine_leviathan).view; end}; {always=true, "[На юго-восток, к скелету]", function() move(submarine_leviathan, "dyp_temple_whale"); psub("dyp_temple_whale"); return where(submarine_leviathan).view; end}; {always=true, "[На юг, к ущелью]", function() move(submarine_leviathan, "dyp_temple_crevice_east"); psub("dyp_temple_crevice_east"); return where(submarine_leviathan).view; end}; {always=true, "[На запад, вдоль скалы]", function() move(submarine_leviathan, "dyp_temple_cliff_4"); psub("dyp_temple_cliff_4"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_temple_whale"}; {always=true, "[На север, к храму]", function() temple_found = true; move(submarine_leviathan, "iyh_far_from_entrance_foot"); lifeoff(iyh_far_from_entrance); atl_iyh_shockfish_away = 0; walk("iyh_far_from_entrance"); return where(submarine_leviathan).view; end}; {always=true, "[На юг, к ущелью]", function() move(submarine_leviathan, "dyp_temple_crevice_far_east"); psub("dyp_temple_crevice_far_east"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; {tag="dyp_center"}; {always=true, "[На восток, к обелиску]", function() atl_navjiarr_obelisks_seen = true; move(submarine_leviathan, "dyp_temple_north_west"); psub("dyp_temple_north_west"); return where(submarine_leviathan).view; end}; {always=true, "[Отойти от штурвала]", code = [[ walk('leviathan_wheelhouse'); ]]}; {always=true, "[Отправиться в другое место]", code = [[ walk('leviathan_dlg'); ]]}; }; }; dyp_temple_cave_entrance = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Вы стоите у выхода из глубокой пещеры, расположенной неподалеку от храма Дипатреанотра. Перед вами длинный коридор, ведущий куда-то в глубь скалы. Вдалеке, в коридоре вы видите слабое свечение. ]]; underwater = true; way = { kh_vroom("Выйти из пещеры", "dyp_temple_east"); kh_vroom("В глубь пещеры", "dyp_temple_cave_deep"); }; }; dyp_temple_cave_deep = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = function(s) if dyp_temple_blue_lever.state == 1 then return [[Здесь коридор разветвляется на три. В конце каждого вы видите слабое свечение красного, зеленого и синего цветов. В одной из стен пещеры открыт проход, который вы ранее не замечали. ]]; else return [[Здесь коридор разветвляется на три. В конце каждого вы видите слабое свечение красного, зеленого и синего цветов. ]]; end; end; underwater = true; way = { kh_vroom("К выходу из пещеры", "dyp_temple_cave_entrance"); kh_vroom("В \"Красный\" коридор", "dyp_temple_cave_red"); kh_vroom("В \"Зеленый\" коридор", "dyp_temple_cave_green"); kh_vroom("В \"Синий\" коридор", "dyp_temple_cave_blue"); kh_vroom("В скрытый проход", "dyp_temple_cave_main"):disable(); }; }; dyp_temple_cave_main = room { nam = "Храм Дипатреанотра, пещера"; dsc = [[Слабый свет покрывающих стены водорослей освещает небольшую круглую комнату. ]]; obj = { "dyp_temple_cave_main_pedestal"; }; way = { kh_vroom("К выходу", 'dyp_temple_cave_deep'); }; } dyp_temple_cave_main_pedestal = obj { var { state = false; }; nam = "dyp_temple_cave_main_pedestal"; dsc = function(s) if s.state then return "В центре комнаты размещен небольшой пьедестал. Сейчас он пуст"; else return "В центре комнаты размещен небольшой пьедестал, на котором покоится {фрагмент карты}. "; end; end; act = function(s) s.state = true; item_lse_map.state = item_lse_map.state + 1; return "Вы забираете фрагмент карты. "; end; } dyp_temple_cave_red = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Проход заканчивается массивной металлической дверью, совершенно гладкой. Вы не видите никакого способа открыть ее. ]]; underwater = true; obj = { "dyp_temple_statue_red"; }; way = { kh_vroom("К выходу из пещеры", "dyp_temple_cave_deep"); kh_vroom("В дверь", "dyp_temple_red_room"):disable(); }; }; dyp_temple_statue_red = obj { nam = "dyp_temple_statue_red"; dsc = [[Рядом с дверью стоит древняя статуя навьяра. В правой руке статуя держит копье, в навершии которого ярко светится красный камень. На поясе статуи вы видите небольшое круглое {отверстие}. ]]; used = function(s, o) if o == dyp_item_stone_red then remove(dyp_item_stone_red, me()); path("В дверь"):enable(); return [[Вы помещаете камень в отверстие на поясе статуи и массивная металлическая дверь опускается под пол, открывая проход в большое темное помещение.]]; end; end; }; dyp_temple_red_room = room { var { state = 0; }; nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; pic = function(s) if s.state == 0 then return "images/dyp_redroom_bg.png"; else return "images/dyp_redroom_on_bg.png"; end; end; dsc = function(s) if s.state == 0 then return [[Пол пещеры разделен на 25 квадратных ячеек, совершенно одинаковых на первый взгляд. ]]; else return [[Пол пещеры разделен на 25 квадратных ячеек, некоторые из которых отмечены какими-то символами. ]]; end; end; way = { kh_vroom("К выходу из пещеры", "dyp_temple_cave_red"); }; }; dyp_temple_cave_green = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Проход заканчивается массивной металлической дверью, совершенно гладкой. Вы не видите никакого способа открыть ее. ]]; underwater = true; obj = { "dyp_temple_statue_green"; }; way = { kh_vroom("В главный коридор", "dyp_temple_cave_deep"); kh_vroom("В дверь", "dyp_temple_green_room_1"):disable(); }; }; dyp_temple_statue_green = obj { nam = "dyp_temple_statue_green"; dsc = [[Рядом с дверью стоит древняя статуя навьяра. В правой руке статуя держит копье, в навершии которого ярко светится зеленый камень. На поясе статуи вы видите небольшое круглое {отверстие}. ]]; used = function(s, o) if o == dyp_item_stone_green then remove(dyp_item_stone_green, me()); path("В дверь"):enable(); return [[Вы помещаете камень в отверстие на поясе статуи и массивная металлическая дверь опускается под пол, открывая проход в соседнюю комнату.]]; end; end; }; dyp_wall1_a = kh_vroom("На восток", "dyp_temple_green_room_in_1"):disable(); dyp_wall1_a_obj = obj { nam = "dyp_wall1_a_obj"; dsc = function() if disabled(dyp_wall1_a) then return [[В восточной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В восточной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall1_b = kh_vroom("На запад", "dyp_temple_green_room_1"):disable(); dyp_wall1_b_obj = obj { nam = "dyp_wall1_b_obj"; dsc = function() if disabled(dyp_wall1_b) then return [[В западной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В западной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall2_a = kh_vroom("На юг", "dyp_temple_green_room_in_3"):disable(); dyp_wall2_a_obj = obj { nam = "dyp_wall2_a_obj"; dsc = function() if disabled(dyp_wall2_a) then return [[В южной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В южной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall2_b = kh_vroom("На север", "dyp_temple_green_room_in_1"):disable(); dyp_wall2_b_obj = obj { nam = "dyp_wall2_b_obj"; dsc = function() if disabled(dyp_wall2_b) then return [[В северной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В северной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall3_a = kh_vroom("На восток", "dyp_temple_green_room_in_2"):disable(); dyp_wall3_a_obj = obj { nam = "dyp_wall3_a_obj"; dsc = function() if disabled(dyp_wall3_a) then return [[В восточной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В восточной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall3_b = kh_vroom("На запад", "dyp_temple_green_room_in_1"):disable(); dyp_wall3_b_obj = obj { nam = "dyp_wall3_b_obj"; dsc = function() if disabled(dyp_wall3_b) then return [[В западной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В западной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall4_a = kh_vroom("На восток", "dyp_temple_green_room_in_4"):disable(); dyp_wall4_a_obj = obj { nam = "dyp_wall4_a_obj"; dsc = function() if disabled(dyp_wall4_a) then return [[В восточной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В восточной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall4_b = kh_vroom("На запад", "dyp_temple_green_room_in_3"):disable(); dyp_wall4_b_obj = obj { nam = "dyp_wall4_b_obj"; dsc = function() if disabled(dyp_wall4_b) then return [[В западной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В западной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall5_a = kh_vroom("На юг", "dyp_temple_green_room_in_4"):disable(); dyp_wall5_a_obj = obj { nam = "dyp_wall5_a_obj"; dsc = function() if disabled(dyp_wall5_a) then return [[В южной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В южной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall5_b = kh_vroom("На север", "dyp_temple_green_room_in_2"):disable(); dyp_wall5_b_obj = obj { nam = "dyp_wall5_b_obj"; dsc = function() if disabled(dyp_wall5_b) then return [[В северной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В северной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall6_a = kh_vroom("На запад", "dyp_temple_green_room_in_2"):disable(); dyp_wall6_a_obj = obj { nam = "dyp_wall6_a_obj"; dsc = function() if disabled(dyp_wall6_a) then return [[В южной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В южной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall6_b = kh_vroom("На восток", "dyp_temple_green_room_2"):disable(); dyp_wall6_b_obj = obj { nam = "dyp_wall6_b_obj"; dsc = function() if disabled(dyp_wall6_b) then return [[В северной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В северной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall7_a = kh_vroom("На восток", "dyp_temple_green_room_4"):disable(); dyp_wall7_a_obj = obj { nam = "dyp_wall7_a_obj"; dsc = function() if disabled(dyp_wall7_a) then return [[В восточной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В восточной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall7_b = kh_vroom("На запад", "dyp_temple_green_room_in_4"):disable(); dyp_wall7_b_obj = obj { nam = "dyp_wall7_b_obj"; dsc = function() if disabled(dyp_wall7_b) then return [[В западной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В западной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall8_a = kh_vroom("На запад", "dyp_temple_green_room_3"):disable(); dyp_wall8_a_obj = obj { nam = "dyp_wall8_a_obj"; dsc = function() if disabled(dyp_wall8_a) then return [[В южной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В южной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_wall8_b = kh_vroom("На восток", "dyp_temple_green_room_in_3"):disable(); dyp_wall8_b_obj = obj { nam = "dyp_wall8_b_obj"; dsc = function() if disabled(dyp_wall8_b) then return [[В северной стене расположен закрытый решеткой проход в соседнюю комнату. ]]; else return [[В северной стене расположен проход в соседнюю комнату. ]]; end; end; }; dyp_temple_lever_1_1 = obj { nam = "dyp_temple_lever_1_1"; dsc = [[{Дернуть левый рычаг}^]]; act = function(s) dyp_wall4_a:toggle(); dyp_wall4_b:toggle(); dyp_wall5_a:toggle(); dyp_wall5_b:toggle(); dyp_wall7_a:toggle(); dyp_wall7_b:toggle(); return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. "; end; }; dyp_temple_lever_1_2 = obj { nam = "dyp_temple_lever_1_2"; dsc = [[{Дернуть средний рычаг}^]]; act = function(s) dyp_wall6_a:toggle(); dyp_wall6_b:toggle(); dyp_wall8_a:toggle(); dyp_wall8_b:toggle(); return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. "; end; }; dyp_temple_lever_1_3 = obj { nam = "dyp_temple_lever_1_3"; dsc = [[{Дернуть правый рычаг}^]]; act = function(s) dyp_wall1_a:toggle(); dyp_wall1_b:toggle(); dyp_wall3_a:toggle(); dyp_wall3_b:toggle(); dyp_wall5_a:toggle(); dyp_wall5_b:toggle(); return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. "; end; }; dyp_temple_lever_2_1 = obj { nam = "dyp_temple_lever_1_1"; dsc = [[{Дернуть левый рычаг}^]]; act = function(s) dyp_wall2_a:toggle(); dyp_wall2_b:toggle(); dyp_wall3_a:toggle(); dyp_wall3_b:toggle(); return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. "; end; }; dyp_temple_lever_2_2 = obj { nam = "dyp_temple_lever_1_2"; dsc = [[{Дернуть средний рычаг}^]]; act = function(s) dyp_wall2_a:toggle(); dyp_wall2_b:toggle(); dyp_wall4_a:toggle(); dyp_wall4_b:toggle(); return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. "; end; }; dyp_temple_lever_2_3 = obj { nam = "dyp_temple_lever_1_3"; dsc = [[{Дернуть правый рычаг}^]]; act = function(s) dyp_wall3_a:toggle(); dyp_wall3_b:toggle(); dyp_wall5_a:toggle(); dyp_wall5_b:toggle(); dyp_wall7_a:toggle(); dyp_wall7_b:toggle(); return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. "; end; }; dyp_temple_lever_3_1 = obj { nam = "dyp_temple_lever_1_1"; dsc = [[{Дернуть левый рычаг}^]]; act = function(s) dyp_wall5_a:toggle(); dyp_wall5_b:toggle(); dyp_wall6_a:toggle(); dyp_wall6_b:toggle(); return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. "; end; }; dyp_temple_lever_3_2 = obj { nam = "dyp_temple_lever_1_2"; dsc = [[{Дернуть средний рычаг}^]]; act = function(s) dyp_wall1_a:toggle(); dyp_wall1_b:toggle(); dyp_wall4_a:toggle(); dyp_wall4_b:toggle(); return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. "; end; }; dyp_temple_lever_3_3 = obj { nam = "dyp_temple_lever_1_3"; dsc = [[{Дернуть правый рычаг}^]]; act = function(s) dyp_wall2_a:toggle(); dyp_wall2_b:toggle(); dyp_wall3_a:toggle(); dyp_wall3_b:toggle(); return "Вы дергаете рычаг. Решетки со скрежетом меняют свое положение - часть уходит в пол, часть поднимается. "; end; }; dyp_temple_lever_4 = obj { nam = "dyp_temple_lever_4"; dsc = [[^{Дернуть рычаг}^]]; act = function(s) dyp_temple_red_room.state = 1; return "Вы дергаете рычаг, но не замечаеет видимых изменений. Что-то произошло, но не в этой комнате. "; end; } dyp_temple_cave_pic = function(x, y) local pic = 'images/dyp_cave_bg.png;images/player.png@' .. tostring(x * 64 + 64) .. ',' .. tostring(y * 64 + 64); if not disabled(dyp_wall1_a) then pic = pic .. ';images/dyp_cave_v_portcullis_down.png@91,33' else pic = pic .. ';images/dyp_cave_v_portcullis_up.png@91,33' end; if not disabled(dyp_wall3_a) then pic = pic .. ';images/dyp_cave_v_portcullis_down.png@155,33' else pic = pic .. ';images/dyp_cave_v_portcullis_up.png@155,33' end; if not disabled(dyp_wall6_a) then pic = pic .. ';images/dyp_cave_v_portcullis_down.png@219,33' else pic = pic .. ';images/dyp_cave_v_portcullis_up.png@219,33' end; pic = pic .. ';images/dyp_cave_layer_2.png'; if not disabled(dyp_wall2_a) then pic = pic .. ';images/dyp_cave_h_portcullis_down.png@91,95' else pic = pic .. ';images/dyp_cave_h_portcullis_up.png@91,95' end; if not disabled(dyp_wall5_a) then pic = pic .. ';images/dyp_cave_h_portcullis_down.png@155,95' else pic = pic .. ';images/dyp_cave_h_portcullis_up.png@155,95' end; if not disabled(dyp_wall8_a) then pic = pic .. ';images/dyp_cave_v_portcullis_down.png@91,97' else pic = pic .. ';images/dyp_cave_v_portcullis_up.png@91,97' end; if not disabled(dyp_wall4_a) then pic = pic .. ';images/dyp_cave_v_portcullis_down.png@155,97' else pic = pic .. ';images/dyp_cave_v_portcullis_up.png@155,97' end; if not disabled(dyp_wall7_a) then pic = pic .. ';images/dyp_cave_v_portcullis_down.png@219,97' else pic = pic .. ';images/dyp_cave_v_portcullis_up.png@219,97' end; pic = pic .. ';images/dyp_cave_layer_3.png;images/dyp_cave_overlay.png'; return pic; end; dyp_temple_green_room_1 = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. В западной части комнаты расположены три рычага. В северной стене комнаты расположен проход, ведущий к выходу. ]]; pic = function(s) return dyp_temple_cave_pic(0, 0); end; obj = { "dyp_temple_lever_1_1", "dyp_temple_lever_1_2", "dyp_temple_lever_1_3", "dyp_wall1_a_obj" }; way = { kh_vroom("На север", "dyp_temple_cave_green"); "dyp_wall1_a" } }; dyp_temple_green_room_2 = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. В западной части комнаты расположены три рычага. ]]; pic = function(s) return dyp_temple_cave_pic(3, 0); end; obj = { "dyp_temple_lever_2_1", "dyp_temple_lever_2_2", "dyp_temple_lever_2_3", "dyp_wall6_a_obj" }; way = { "dyp_wall6_a" } }; dyp_temple_green_room_3 = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. В западной части комнаты расположены три рычага. ]]; pic = function(s) return dyp_temple_cave_pic(0, 1); end; obj = { "dyp_temple_lever_3_1", "dyp_temple_lever_3_2", "dyp_temple_lever_3_3", "dyp_wall8_b_obj" }; way = { "dyp_wall8_b" }; }; dyp_temple_green_room_4 = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. В западной части комнаты расположен рычаг. ]]; pic = function(s) return dyp_temple_cave_pic(3, 1); end; obj = { "dyp_wall7_b_obj", "dyp_temple_lever_4" }; way = { "dyp_wall7_b" }; }; dyp_temple_green_room_in_1 = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. ]]; pic = function(s) return dyp_temple_cave_pic(1, 0); end; obj = { "dyp_wall1_b_obj", "dyp_wall2_a_obj", "dyp_wall3_a_obj", }; way = { "dyp_wall1_b", "dyp_wall2_a", "dyp_wall3_a" } }; dyp_temple_green_room_in_2 = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. ]]; pic = function(s) return dyp_temple_cave_pic(2, 0); end; obj = { "dyp_wall3_b_obj", "dyp_wall6_b_obj", "dyp_wall5_a_obj", }; way = { "dyp_wall3_b", "dyp_wall6_b", "dyp_wall5_a" } }; dyp_temple_green_room_in_3 = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. ]]; pic = function(s) return dyp_temple_cave_pic(1, 1); end; obj = { "dyp_wall2_b_obj", "dyp_wall4_a_obj", "dyp_wall8_a_obj", }; way = { "dyp_wall2_b", "dyp_wall4_a", "dyp_wall8_a" } }; dyp_temple_green_room_in_4 = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Небольшая квадратная комната наполнена слабым светом водорослей, покрывающих стены. ]]; pic = function(s) return dyp_temple_cave_pic(2, 1); end; obj = { "dyp_wall4_b_obj", "dyp_wall5_b_obj", "dyp_wall7_a_obj", }; way = { "dyp_wall4_b", "dyp_wall5_b", "dyp_wall7_a" } }; dyp_temple_cave_blue = room { nam = "Храм Дипатреанотра, пещера"; disp = "Храм Дипатреанотра, пещера"; dsc = [[Проход заканчивается массивной металлической дверью, совершенно гладкой. Вы не видите никакого способа открыть ее. ]]; underwater = true; obj = { "dyp_temple_statue_blue"; }; entered = function(s) dyp_temple_blue_room.position = "02"; end; way = { kh_vroom("В главный коридор", "dyp_temple_cave_deep"); kh_vroom("В дверь", "dyp_temple_blue_room"):disable(); }; }; dyp_temple_statue_blue = obj { nam = "dyp_temple_statue_blue"; dsc = [[Рядом с дверью стоит древняя статуя навьяра. В правой руке статуя держит копье, в навершии которого ярко светится синий камень. На поясе статуи вы видите небольшое круглое {отверстие}. ]]; used = function(s, o) if o == dyp_item_stone_blue then remove(dyp_item_stone_blue, me()); path("В дверь"):enable(); return [[Вы помещаете камень в отверстие на поясе статуи и массивная металлическая дверь опускается под пол, открывая проход в большое помещение.]]; end; end; }; dyp_temple_blue_lever = obj { var { state = false; }; nam = "dyp_temple_blue_lever"; dsc = [[Рядом с вами расположен {рычаг}. ]]; act = function(s) if s.state then return [[Рычаг не поддается. ]]; else -- TODO open the hidden chamber path("В скрытый проход", dyp_temple_cave_deep):enable(); s.state = true; return [[Вы дергаете рычаг. Со стороны входа доносится глухой звук движущейся каменной плиты. ]]; end; end; }; dyp_temple_blue_room = labyrinth { var { position = "02"; }; nam = "Храм Дипатреанотра, пещера"; pic = function(s) local x = s.map[s.position].x * 32 + 36; local y = s.map[s.position].y * 32 + 96; return "images/dyp_blueroom_bg.png;images/player.png@" .. y .. ',' .. x; end; --dsc = "Вы находитесь в большой комнате. Стены покрыты водорослями, източающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. "; dir = { "На север"; "На восток"; "На юг"; "На запад"; }; underwater = true; map = { ["00"] = { name = [[Вы находитесь в северо-западном углу большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 0; y = 0; e2 = "01"; e3 = "10"; }; ["01"] = { name = [[Вы находитесь у северной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 0; y = 1; e2 = "02"; e3 = "11"; e4 = "00"; enter = function(s) walk("dyp_temple_cave_dead"); end; }; ["02"] = { name = [[Вы находитесь у входа в большую комнату. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 0; y = 2; e2 = "03"; e3 = "12"; e4 = "01"; ex1 = "dyp_temple_cave_blue"; }; ["03"] = { name = [[Вы находитесь у северной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 0; y = 3; e2 = "04"; e3 = "13"; e4 = "02"; }; ["04"] = { name = [[Вы находитесь в северо-восточном углу большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 0; y = 4; e3 = "14"; e4 = "03"; }; ["10"] = { name = [[Вы находитесь у западной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 1; y = 0; e1 = "00"; e2 = "11"; e3 = "20"; }; ["11"] = { name = [[Вы находитесь в северо-западной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 1; y = 1; e1 = "01"; e2 = "12"; e3 = "21"; e4 = "10"; }; ["12"] = { name = [[Вы находитесь в северной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 1; y = 2; e1 = "02"; e2 = "13"; e3 = "22"; e4 = "11"; }; ["13"] = { name = [[Вы находитесь в северо-восточной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 1; y = 3; e1 = "03"; e2 = "14"; e3 = "23"; e4 = "12"; enter = function(s) walk("dyp_temple_cave_dead"); end; }; ["14"] = { name = [[Вы находитесь у восточной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 1; y = 4; e1 = "04"; e3 = "24"; e4 = "13"; }; ["20"] = { name = [[Вы находитесь у западной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 2; y = 0; e1 = "10"; e2 = "21"; e3 = "30"; enter = function(s) walk("dyp_temple_cave_dead"); end; }; ["21"] = { name = [[Вы находитесь в западной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 2; y = 1; e1 = "11"; e2 = "22"; e3 = "31"; e4 = "20"; }; ["22"] = { name = [[Вы находитесь в центре большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 2; y = 2; e1 = "12"; e2 = "23"; e3 = "32"; e4 = "21"; enter = function(s) walk("dyp_temple_cave_dead"); end; }; ["23"] = { name = [[Вы находитесь в восточной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 2; y = 3; e1 = "13"; e2 = "24"; e3 = "33"; e4 = "12"; }; ["24"] = { name = [[Вы находитесь у восточной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 2; y = 4; e1 = "14"; e3 = "34"; e4 = "23"; }; ["30"] = { name = [[Вы находитесь у западной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 3; y = 0; e1 = "20"; e2 = "31"; e3 = "40"; }; ["31"] = { name = [[Вы находитесь в юго-западной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 3; y = 1; e1 = "21"; e2 = "32"; e3 = "41"; e4 = "30"; }; ["32"] = { name = [[Вы находитесь в южной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 3; y = 2; e1 = "22"; e2 = "33"; e3 = "42"; e4 = "31"; enter = function(s) walk("dyp_temple_cave_dead"); end; }; ["33"] = { x = 3; y = 3; name = [[Вы находитесь в юго-восточной части большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; e1 = "23"; e2 = "34"; e3 = "43"; e4 = "32"; }; ["34"] = { name = [[Вы находитесь у восточной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 3; y = 4; e1 = "24"; e3 = "44"; e4 = "33"; enter = function(s) walk("dyp_temple_cave_dead"); end; }; ["40"] = { name = [[Вы находитесь в юго-западном углу большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 4; y = 0; e1 = "30"; e2 = "41"; }; ["41"] = { name = [[Вы находитесь у южной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 4; y = 1; e1 = "31"; e2 = "42"; e4 = "40"; enter = function(s) walk("dyp_temple_cave_dead"); end; }; ["42"] = { name = [[Вы находитесь у южной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 4; y = 2; e1 = "32"; e2 = "43"; e4 = "41"; enter = function(s) move(dyp_temple_blue_lever, s); end; left = function(s) remove(dyp_temple_blue_lever, s); end; }; ["43"] = { name = [[Вы находитесь у южной стены большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 4; y = 3; e1 = "33"; e2 = "44"; e4 = "42"; }; ["44"] = { name = [[Вы находитесь в юго-восточном углу большой комнаты. Стены покрыты водорослями, источающими слабый свет. Пол в комнате разделен на двадцать пять квадратных ячеек. ]]; x = 4; y = 4; e1 = "34"; e4 = "43"; }; }; } dyp_crab_cave = labyrinth { var { position = "00"; fight = false; }; nam = "Пещера"; disp = "Пещера"; dir = { "На северо-запад"; "На северо-восток"; "На юго-запад"; "На юго-восток"; "Выйти"; }; underwater = true; map = { ["00"] = { name = [[Вы стоите у входа в глубокую пещеру. Стены здесь неровные и извилистые, образую причудливые переплетения длинных коридоров. Кто знает, куда они приведут? На каменистом полу едва ли можно заметить какие-либо следы. ]]; e1 = "10"; e2 = "11"; ex5 = "dyp_temple_cliff_1"; }; ["10"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e1 = "20"; e2 = "21"; e4 = "00"; }; ["11"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e1 = "21"; e2 = "22"; e3 = "00"; }; ["20"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e1 = "30"; e4 = "10"; }; ["21"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e1 = "31"; e2 = "32"; e3 = "10"; e4 = "11"; }; ["22"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e2 = "33"; e3 = "11"; }; ["30"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e1 = "40"; e2 = "41"; e4 = "20"; }; ["31"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e2 = "42"; e4 = "21"; }; ["32"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e2 = "43"; e3 = "21"; }; ["33"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e3 = "22"; }; ["40"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e2 = "50"; e4 = "30"; }; ["41"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e3 = "30"; }; ["42"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e1 = "51"; e3 = "31"; }; ["43"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e1 = "52"; e3 = "32"; enter = function(s) if not s.fight then s.fight = true; walk("dyp_crab_fight_intro"); end; end; }; ["50"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e3 = "40"; enter = function(s) if (not exist(dyp_scepter_chest, s)) then move(dyp_scepter_chest, s); end; end; exit = function(s) remove(dyp_scepter_chest, s); end; }; ["51"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e4 = "42"; }; ["52"] = { name = [[Вы находитесь где-то в переплетении длинных коридоров. Кто знает, куда они приведут? ]]; e4 = "43"; enter = function(s) if (not exist(dyp_dead_navjiarr, s)) then move(dyp_dead_navjiarr, s); end; end; exit = function(s) remove(dyp_dead_navjiarr, s); end; }; }; }; dyp_temple_cave_dead = game_over("Игра окончена", [[Потолок резко опускается на вас, придавливая к полу. Стекло шлема трескается, а сочленения скафандра гнутся, сдавливая ваше тело. Холодная вода начинает наполнять скафандр... ]]) dyp_scepter_chest = obj { var { state = 0; }; nam = "dyp_scepter_chest"; dsc = function(s) if s.state == 0 then return [[В углу аккуратно поставлен небольшой {сундучок} с хитрым замком. Чтобы открыть его придется сперва разобраться, как он устроен. ]]; else return [[В углу аккуратно поставлен небольшой {сундучок}. Сейчас он пуст. ]]; end; end; act = function(s) if s.state == 1 then return [[Вам здесь больше ничего не нужно. ]]; else walk("dyp_crab_cave_puzzle"); return [[Вы присматриваетесь к замку. ]]; end; end; }; dyp_dead_navjiarr = obj { var { state = 0; }; nam = "dyp_dead_navjiarr"; dsc = [[Рядом с вами лежит мертвый навьяр. Тело изуродовано могучими клешнями крабов, однако, судя по всему, лежит здесь недавно. Рядом с трупом лежит его {сумка}. ]]; act = function(s) if s.state == 0 then s.state = 1; move(dyp_item_star_map, pl); move(dyp_item_aedienrr_notes, pl); return [[В сумке лежат две таблички: металлическая и обычная, каменная. Металлическая табличка сразу привлекает ваше внимание. Причудливые узоры схем никак не напоминают навьярские письмена, а символы нанесенные вокруг, не говорят вам ровным счетом ни о чем. Стоит показать это Светловой, быть может она сможет что-то из этого извлечь. ]]; else return "Сумка пуста. "; end; end; }; dyp_item_aedienrr_notes = obj { nam = "dyp_item_aedienrr_notes"; disp = function(s) if language_known then return "Записи Аэдиенрра"; else return "Каменная табличка"; end; end; inv = function(s) if language_known then return "Надписи на каменной табличке рассказывают о последнем путешествии Аэдиенрра. Молодой навьяр разгадал схемы на карте небесных огней и предположил, что они ведут в пещеру в скале к северу от Дипатреанотра. Ориентирами служат каменные обелиски-предостережения и храм, расположенный где-то у этой скалы. Никто из Ираафаанотра не смог рассказать ничего о храме, поэтому исследователю пришлось долго идти наугад. Последняя запись гласит, что он почти добрался до пещеры... "; else return "Вы не понимаете языка и надписи значат для вас не больше чем ряды вертикальных цветных полосок. "; end; end; }; dyp_item_star_map = obj { nam = "dyp_item_star_map"; disp = "Карта небесных огней"; inv = [[Металлическая табличка, испещренная непонятными вам линиями и символами. Письмена напоминают навьярские лишь очень отдаленно и вы даже не предполагаете, что они могут значить. ]]; }; dyp_item_star_map_copy = obj { nam = "dyp_item_star_map"; disp = "Карта небесных огней(копия)"; inv = [[Металлическая табличка, испещренная непонятными вам линиями и символами. Письмена напоминают навьярские лишь очень отдаленно и вы даже не предполагаете, что они могут значить. ]]; }; dyp_crab_fight_intro = cutscene("dyp_crab_fight_intro", "Пещера", [[Впереди, вы замечаете какое-то движение. Луч прожетора выхватывает огромные острые клешни гигантского краба, устремившегося к вам. Следом за ним вы видите множество крабов поменьше, также ползущих к вам на своих тонких острых ногах. ]], "dyp_crab_fight"); dyp_crab_fight_win = cutscene("dyp_crab_fight_win", "Пещера", [[Отбившись от крабов, вы остаетесь одни в темном лабиринте пещер. ]], "dyp_crab_cave"); dyp_cmbt_learr = combatant { nam = "dyp_cmbt_learr"; disp = "Леарр"; disp2 = "Леарр"; disp3 = "Леарр"; x = 5; y = 7; pic = "images/learr.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasSpear = true; state = function(s) if s.hp == 10 then return ""; elseif s.hp > 7 then return "Она легко ранена. "; elseif s.hp > 3 then return "Она ранена. "; else return "Она тяжело ранена. "; end; end; 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; end; else if (math.abs(s.x - enemy.x) == 1 and s.y == enemy.y or s.x == enemy.x and math.abs(s.y - enemy.y) == 1) then enemy.hp = enemy.hp - 1; pn("Леарр бьет " .. enemy.disp2 .. " и попадает. "); return; end; end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Леарр идет к " .. enemy.disp3 .. ". "); end; dsc = function(s) if (s.hp > 0) then return [[ {Леарр} готова к бою. ]]; else return [[ {Леарр} без сознания. ]]; end; end; }; dyp_cmbt_wright = combatant { nam = "za_cmbt_wright"; disp = "Райт"; disp2 = "Райта"; disp3 = "Райту"; x = 5; y = 7; pic = "images/jack.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasHarpoon = true; state = function(s) if s.hp == 10 then return ""; elseif s.hp > 7 then return "Он легко ранен. "; elseif s.hp > 3 then return "Он ранен. "; else return "Он тяжело ранен. "; end; end; 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; }; dyp_cmbt_radcliffe = combatant { nam = "dyp_cmbt_radcliffe"; disp = "Уолтер"; disp2 = "Уолтера"; disp3 = "Уолтеру"; x = 5; y = 7; pic = "images/walter.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasHarpoon = true; state = function(s) if s.hp == 10 then return ""; elseif s.hp > 7 then return "Он легко ранен. "; elseif s.hp > 3 then return "Он ранен. "; else return "Он тяжело ранен. "; end; end; 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; }; dyp_cmbt_anna = combatant { nam = "dyp_cmbt_anna"; disp = "Анна"; disp2 = "Анну"; disp3 = "Анне"; x = 5; y = 7; pic = "images/anna.png"; ally = "Я не буду атаковать союзника."; nohit = "Я не буду атаковать союзника."; noshoot = "Я не буду атаковать союзника."; hp = 10; hasHarpoon = true; state = function(s) if s.hp == 10 then return ""; elseif s.hp > 7 then return "Она легко ранена. "; elseif s.hp > 3 then return "Она ранена. "; else return "Она тяжело ранена. "; end; end; 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; }; dyp_king_crab = combatant { nam = "dyp_king_crab"; disp = "краб"; disp2 = "краба"; disp3 = "крабу"; x = 4; y = 1; hp = 4; pic = "images/king_crab.png"; shootHit = "Вы стреляете в краба и попадаете в него. "; shootMiss = "Вы стреляете в краба, но не попадаете в него. "; shootKill = "Вы стреляете в краба и он умирает. "; handHit = "Вы ударяете краба. "; handKill = "Вы ударяет краба, убивая его. "; handFar = "Слишком далеко. "; enemy = true; state = function(s) if s.hp == 4 then return ""; elseif s.hp == 3 then return "Он легко ранен. "; elseif s.hp == 2 then return "Он ранен. "; else return "Он тяжело ранен. "; end; end; dsc = function(s) if (s.hp > 0) then return "{Краб} готов к бою. "; 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("Краб ждет. "); 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 (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 - 2; pn("Краб бьет " .. enemy.disp2 .. " и попадает. "); return; end; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Краб идет к " .. enemy.disp3 .. ". "); end; }; dyp_little_crab = function(nam, index, x, y) return combatant { nam = nam; disp = "детеныш краба " .. tostring(index); disp2 = "детеныша краба " .. tostring(index); disp3 = "детенышу краба " .. tostring(index); x = x; y = y; hp = 2; pic = "images/little_crab_".. index ..".png"; shootHit = "Вы стреляете в детеныша краба и попадаете в него. "; shootMiss = "Вы стреляете в детеныша краба, но не попадаете в него. "; shootKill = "Вы стреляете в детеныша краба и он умирает. "; handHit = "Вы ударяете детеныша краба. "; handKill = "Вы ударяет детеныша краба, убивая его. "; handFar = "Слишком далеко. "; enemy = true; state = function(s) if s.hp == 1 then return "Он ранен. "; end; return ""; end; dsc = function(s) if (s.hp > 0) then return "{Детеныш краба " .. tostring(index).. "} готов к бою. "; 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 (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; s.x = path.p[2][1]; s.y = path.p[2][2]; pn("Детеныш краба ".. tostring(index).. " идет к " .. enemy.disp3 .. ". "); end; }; end; dyp_crab_fight = battlefield { nam = "Пещера"; plX = 4; plY = 7; map = { {2,0,0,0,0,0,2}; {2,0,0,0,0,0,2}; {2,1,0,0,0,0,2}; {2,0,0,1,0,1,2}; {2,0,1,0,0,0,2}; {2,0,0,0,0,1,2}; {2,0,0,0,0,0,2}; }; bcg_pic = 'images/battle_bg_cave.png'; win = "dyp_crab_cave_win"; lose = "game_over_crab_cave"; obstacle = "images/stones.png"; underwater = true; entered = function(s) --TODO prepend player associate - anna, learr, walter or jack if (char_learr.follow) then table.insert(s.obj, 1, dyp_cmbt_learr); s.plX = 3; elseif (char_anna.follow) then table.insert(s.obj, 1, dyp_cmbt_anna); s.plX = 3; elseif (char_wright.follow) then table.insert(s.obj, 1, dyp_cmbt_wright); s.plX = 3; elseif (char_radcliffe.follow) then table.insert(s.obj, 1, dyp_cmbt_radcliffe); s.plX = 3; end; end; obj = { "dyp_king_crab"; dyp_little_crab("dyp_little_crab_1", 1, 2, 1); dyp_little_crab("dyp_little_crab_2", 2, 3, 1); dyp_little_crab("dyp_little_crab_3", 3, 5, 1); dyp_little_crab("dyp_little_crab_4", 4, 6, 1); dyp_little_crab("dyp_little_crab_5", 5, 3, 2); dyp_little_crab("dyp_little_crab_6", 6, 4, 2); dyp_little_crab("dyp_little_crab_7", 7, 5, 2); }; }; dyp_crab_cave_puzzle = room { var { values = { 0, 2, 1, 2, 5 ,4, 1, 1, 2, 4, 0, 5, 1, 3, 2, 4, 0, 3, 0, 2, 0, 3, 5, 4, 5, 0, 4, 1, 3, 3, 3, 5, 5, 1, 4, 2 }; pressed = { nil, nil, nil, nil, nil, nil }; }; nam = "Пещера"; nosave = true; noautosave = true; pic = function(s) local p = "blank:180x180"; for v = 1, #s.values do local tx = (v - 1) % 6; local ty = math.floor((v - 1) / 6); local lstate = ''; if s.pressed[s.values[v] + 1] and s.pressed[s.values[v] + 1][1] == tx and s.pressed[s.values[v] + 1][2] == ty then lstate = 'p'; end; p = p .. ';images/cavelock_' .. tostring(s.values[v]) .. lstate .. '.png@' .. tostring(tx * 30) .. ',' .. tostring(ty * 30); end; return p; end; click = function(s,x,y) local tx = math.floor(x / 30); local ty = math.floor(y / 30); local i = tx + ty * 6 + 1; local val = s.values[i]; for p = 1, 6 do if s.pressed[p] and (s.pressed[p][1] == tx or s.pressed[p][2] == ty) then s.pressed[p] = nil; end; end; s.pressed[val + 1] = {tx, ty}; for p = 1, 6 do if not s.pressed[p] then walkin(here()); return; end; end; p("С легким скрежетом сундук открывается. Внутри вы обнаруживаете небольшой жезл с нанесенными цветными символами. Цвета определенно соответствуют навьярским словам, но что значат символы вам неведомо. "); dyp_scepter_chest.state = 1; put(dyp_item_wand, me()); walk(dyp_crab_cave); end; way = { kh_vroom("Назад", "dyp_crab_cave"); }; }; dyp_crab_cave_win = cutscene("dyp_crab_cave_win", "Пещера", [[Вы расправляетесь с выводком крабов, поселившихся в этой пещере. Чуть поодаль, вы видите тело навьяра, истерзанное этими монстрами. ]], "dyp_crab_cave"); cutscene_wait_for_copy = cutscene("cutscene_wait_for_copy", "Атлантида", [[Вы отправляетесь в свою комнату и ждете. Уже утром, вас вызывает Светлова и сообщает: "Ваша копия готова, можете забирать". ]], "atlantis_drake_room")