item_ven_key_chieftain = obj { nam = 'item_ven_key_chieftain'; disp = "Первый ключ от храма"; inv = [[ Небольшой коралловый ключик, Кольцо его окрашено в красный цвет. ]]; }; item_ven_key_library = obj { nam = 'item_ven_key_library'; disp = "Второй ключ от храма"; inv = [[ Небольшой коралловый ключик, Кольцо его окрашено в зеленый цвет. ]]; }; item_ven_key_tower = obj { nam = 'item_ven_key_tower'; disp = "Третий ключ от храма"; inv = [[ Небольшой коралловый ключик, Кольцо его окрашено в синий цвет. ]]; }; item_ven_gem = obj { nam = "item_ven_gem"; disp = "Жемчужина"; dsc = "{Взять жемчужину}"; inv = [[ Крупная жемчужина, диаметром около сантиметра. ]]; tak = [[ Вы забираете жемчужину. ]]; }; item_ven_coin = obj { nam = "item_ven_coin"; disp = "Монета"; dsc = "{Взять монету}"; inv = [[ Небольшая старинная монета из неизвестного металла. Она хорошо сохранилась несмотря на столетия, проведенные в соленой воде. Вы не понимаете ни одного из символов нанесенных на ее поверхности. ]]; tak = [[ Вы забираете монету. ]]; }; item_ven_tablet = obj { nam = "item_ven_tablet"; disp = "Табличка"; dsc = "{Взять табличку}"; inv = [[ Металлическая табличка с рисунком, изображающим навьяра и человека, пожимающих друг другу руки. ]]; tak = [[ Вы забираете табличку. ]]; }; ven_obelisk = obj { nam = "ven_obelisk"; dsc = [[ В центре площади возвышается {обелиск}, на который нанесено название города. ]]; act = function(s) venaedanotrr_temple_found = true; if (where(char_anna) == here()) then return [[ В нижней части обелиска вы видите карту, указывающую путь к храму. В динамиках раздается голос Анну Рэдклифф: "Это совсем рядом -- к северу отсюда". ]]; else return [[ В нижней части обелиска вы видите карту, указывающую путь к храму. ]]; end; end; } ven_chieftain_dlg = dlg { var { state = 0; answer = 0; }; nam = "Вождь Венаэданотра"; entered = function(s) if (s.state == 0) then ven_chieftain.state = 1; psub('first_meeting'); return [[ Перед вами стоит немолодой навьяр. Несмотря на возраст, он держится гордо и прямо. Его глаза внимательно изучают вас. По его плавникам бегут цветные полосы: "I'yhe'ven'aed'anot'rr lea'lyt'nn ty'yhe'he'vji'a'rr. [другие хевьяры были здесь до вас. Они искали первый город и то, что скрывается в нем]". ]]; else psub('generic'); return [[ Перед вами стоит вождь Венаэданотра. Несмотря на возраст, он держится гордо и прямо. Его глаза внимательно изучают вас. По его плавникам бегут цветные полосы: "I'rr lyt'nn he'vji'a'rr". ]]; end; end; phr = { {tag="first_meeting"}; {"[Цветокод]Кто?", [[ "Их много было. Среди них двое главных. Прежде чем я скажу больше, ответьте - зачем вы здесь?" ]], code [[ psub('why_here'); ]]}; {"[Цветокод]Куда они направились?", [[ "Дальше к своей цели. Но зачем вы здесь?" ]], code [[ psub('why_here'); ]]}; {tag="why_here"}; {"[Цветокод]Я ищу своего отца. Он был с ними", [[ "Они направились в первый город. Один из них хочет пробудить спящего. Вам нужно остановить их". ]], code [[ ven_chieftain_dlg.answer = 1; psub('naethvjirr_awaken'); ]] }; {"[Цветокод]Мы ищем первый город и знания скрытые в нем", [[ "Вы встретите тех хевьяров там, если поспешите. Один из них хочет пробудить спящего. Вам нужно остановить их". ]], code [[ ven_chieftain_dlg.answer = 2; psub('naethvjirr_awaken'); ]]}; {"[Цветокод]Мы ищем спящего в глубинах", [[ "Остановитесь и поверните назад. Спящий не должен пробудиться". ]], code [[ ven_chieftain_dlg.answer = 3; psub('naethvjirr_awaken'); ]]}; {tag="naethvjirr_awaken"}; {"[Цветокод]Что будет, если спящий пробудится?", [[ "Наэтвьирр уничтожит нас всех. Первый корабль приведет нас всех к погибели, если их не остановить". ]], code [[ psub("who_hope") ]]}; {tag="who_hope"}; {"[Цветокод]Кого из них?", [[ "Всех. Каждый из них искал Наэтвьирра лишь для того, чтобы удовлетворить свои личные амбиции. Но они этого не понимают и потому -- опасны". ]], code [[ psub("dont_understand"); ]]}; {tag="dont_understand"}; {"[Цветокод]Я не понимаю", [[ "Поймешь, когда проживешь больше лет" ]]}; {"[Цветокод]И Уильям тоже?", [[ "Все они. И я не знаю никого, кто мог бы пройти этот путь не ради личного интереса". ]], code [[ psub("dont_understand2");]]}; {tag="dont_understand2"}; {"[Цветокод]А я?", function(s) if (ven_chieftain_dlg.answer == 1) then return [[ "Ты уже сказал, что Наэтвьирр тебе не нужен. Ты ищешь своего отца". ]]; elseif (ven_chieftain_dlg.answer == 2) then return [[ "Ты уже сказал, что ищешь наши древние знания. Разве не для себя ты их ищешь?" ]]; else return [[ "Ты уже сказал, что ищешь Наэтвьирра. Разве не для себя ты его ищешь?" ]]; end; end, code [[ if (ven_chieftain_dlg.answer == 2) then psub("what_for_city"); elseif (ven_chieftain_dlg.answer == 3) then psub("what_for_machine"); end; ]]}; {"[Цветокод]Все равно не понимаю. Но спорить не буду.", [[ "Мудрое решение. Перейдем к другим делам". ]], code [[ psub("generic");]]}; {"[Цветокод]Кажется, я понял.", [[ "Тебе лишь кажется". ]], code [[ psub("generic");]]}; {tag="what_for_city"}; {"[Цветокод]Ты прав. Я ищу их для себя. ", [[ "Именно". ]], code [[ pret(); ]]}; {"[Цветокод]Я хочу блага этому миру. Эти знания должны быть доступны всем, а не покоиться на морском дне.", [[ "\"Я хочу\" - ты говоришь. И в этом ключ". ]], code [[ pret(); ]]}; {tag="what_for_machine"}; {"[Цветокод]Ты прав. Я ищу его для себя. ", [[ "Именно". ]], code [[ pret(); ]]}; {"[Цветокод]Мне нужны его знания. ", [[ "\"Мне нужны\" - ты говоришь. И в этом ключ". ]], code [[ pret(); ]]}; {tag="generic"}; {"[Цветокод]Что еще ты можешь сказать про Наэтвьирра?", [[ "Ты уже знаешь саму легенду?" ]],code [[ psub("legend");]]}; {"[Цветокод]I'rr Kee'nn", [[ "Ты возвращайся". ]], code = [[ back(); ]]}; {tag="legend"}; {"[Цветокод]Да", [[ "Тогда, ты должен знать, что Наэтвьирр опасен для всех вьяров. Если я не ссмог убедить тебя, поговори с другими мудрецами - Ien'tea'rr в старой башне и Hya'arhe'ysl'rr в библиотеке". ]], code [[pret();]]}; {"[Цветокод]Нет", [[ "Дело было многие тысячелетия назад. Тогда навьяры жили в огромных городах и строили могучие машины, способные выполнять за нас самые тяжелые и неприятные дела. Большинство из них тогда искали решение последней задачи - создать машину, которая смогла бы думать и собирать знания за них. Долгие годы искали они решение этой проблемы, пока наконец навьяры из первого города не нашли его. Однако нашлись среди навьяров те, кто понимал, что Наэтвьирр первым же делом уничтожит навьяров, которые окажутся совершенно не нужны ему. Вскоре они сумели убедить всех жителей города навсегда закрыть его от всех глаз и забыть напрочь его местоположение. Но были среди навьяров и те, кто хотел наступления новой эры. Эти навьяры спрятали в различных городах подсказки для будущих поколений, когда те пожелают найти древнюю машину и пробудить ее. Если я не ссмог убедить тебя, поговори с другими мудрецами - Ien'tea'rr в старой башне и Hya'arhe'ysl'rr в библиотеке". ]], code [[ path("К башне(на восток)", ven_center):enable(); path("К библиотеке(на запад)", ven_center):enable(); pret(); ]]}; }; }; ven_chieftain = npc { nam = "ven_chieftain"; var { state = 0; }; dsc = function(s) if (s.state == 0) then return [[ Рядом с обелиском стоит {немолодой навьяр}. ]]; else return [[ Рядом с обелиском стоит {вождь}. ]] end; end; dlg = 'ven_chieftain_dlg'; } ven_center = room { nam = "Венаэданотр, центр города"; dsc = [[ Центральная площадь навьярского города вымощена камнем. Во все стороны вокруг тянутся невысокие каменные строения. Вдали на востоке вы видите башню, возвышающуюся над остальными зданиями города. ]]; view = [[ Из иллюминаторов Левиафана открывается великолемный вид на навьярский город. Множество каменных строений, раскинувшихся вокруг центрального обелиска соединены между собой ровными улицами, протянувшимися от окраин к центру. ]]; obj = { 'ven_obelisk', 'ven_chieftain' }; way = { kh_vroom("В Левиафан", leviathan_airlock); kh_vroom("К башне(на восток)", "ven_east"):disable(); kh_vroom("К библиотеке(на запад)", "ven_west"):disable(); }; } ven_west = room { var { visited = false; }; nam = "Венаэдантр, у библиотеки"; dsc = function(s) if (s.visited) then return [[ "Небольшая открытая площадка около библиотеки. Фасад большого здания украшен резными узорами, окрашенными различными цветами". ]]; else s.visited = true; return [[ "Вы с легкостью находите библиотеку - одно из самых больших зданий в городе. Фасад его украшен резными узорами, окрашенными различными цветами, очевидно несущими некоторый смысл для навьяров". ]]; end; end; way = { kh_vroom("В центр", "ven_center"); kh_vroom("В библиотеку", "ven_library"); }; }; ven_library = room { nam = "Венаэданотр, библиотека"; dsc = [[ Внутри библиотека Венаэданотра представляет собой огромный зал со множеством колонн, удерживающих крышу. Между колоннами установлено множество шкафов, на полках которых покоятся бесчисленные металлические таблички, используемые навьярами для записи текстов. ]]; obj = { 'ven_library_guards', 'ven_library_navjiars', 'ven_librarian' }; way = { kh_vroom("Выйти", "ven_west"); }; }; ven_library_guards = obj { nam = "ven_library_guards"; dsc = [[ У входа в библиотеку стоят {два стражника}. Они с изумлением рассматривают вас, когда вы оказываетесь рядом. ]]; act = [[ Незачем их тревожить. ]]; }; ven_library_navjiars = obj { nam = "ven_library_navjiars"; dsc = [[ В зале находится множество {навьяров}. Кто-то сидит у шкафов и читает, другие ходят и оживленно что-то обсуждают. Третьи что-то ищут среди книг. Когда вы оказываетесь рядом, все взоры устремляются на вас - многие из жителей города никогда не видели людей и с интересом разглядывают. ]]; act = [[ Незачем их тревожить. ]]; }; ven_librarian = npc { nam = "ven_librarian"; dsc = [[ Ваше внимание привлекает {навьяр}, заботливо возвращающий таблички на свои места за нерадивыми посетителями. Он, кажется, полностью погружен в свое занятие. ]]; dlg = "ven_librarian_dlg"; }; ven_librarian_dlg = dlg { var { state = 0; }; nam = "Библиотекарь"; entered = function(s) if (s.state == 0) then s.state = 1; psub("first_meeting"); return [[ Навьяр не обращает на вас никакого внимания, даже когда вы подходите совсем близко. ]]; else psub("generic"); return [[ Заметив вас, библиотекарь прекращает свои занятия и устремляет взор на вас. ]]; end; end; phr = { {tag="first_meeting"}; {"[Коснуться плеча навьяра]", [[ Навьяр резко оборачивается, уставившись на вас. Вскоре он приходит в себя и приветствует вас: "Приветствую тебя, хевьяр. Я Hya'arhe'ysl'rr. Что хочешь ты?" ]], code [[ psub ("generic"); ]]}; {"[Уйти]", code = [[ back(); ]]}; {tag="generic"}; {"[Цветокод]Вождь сказал, ты можешь рассказать про Наэтвьирра", [[ "Ты уже знаешь легенду?" ]], code [[ psub("know_legend"); ]]}; {"[Цветокод]I'rr kee'nn", [[ "Ты возвращайся". ]], code = [[ back(); ]]}; {tag="know_legend"}; {"[Цветокод]Да", [[ "Тогда ты знаешь, что Наэтвьирр должен был принести навьярам неслыханное величие и процветание и лишь страх и глупость большинства из них помешали осуществлению этого". ]], code [[ psub("what_about_hevjiarr");]]}; {"[Цветокод]Нет", [[ "Это произошло много тысячелетий назад. Древние навьяры жили в больших городах - гораздо больше чем Ven'aed'anot'rr. Они строили машины, которые помогали им в нелегкой жизни. Однажды, они придумали и построили машину, которая могла все знать и думать за них. И включили бы они эту машину и все было бы прекрасно, однако нашлись среди навьяров те, кто засомневался - а будет ли машина мыслить действительно так же, как мыслил бы навьяр? А не попытается ли машина сама занять место навьяров в этом мире? Не станут ли навьяры совсем не нужны? Вскоре эти сомнения заставили навьяров в страхе покинуть город, навсегда закрыв его от всех глаз и забыв напрочь его местоположение. Так, по собственной глупости навьяры отказались от прекрасного будущего. Если бы сейчас, кто-то смог найти Lse'ry'anot'rr и пробудить Na'eth'vji'rr'а, то он бы вернул навьярам былое величие их народа". ]], code [[ psub("what_about_hevjiarr");]]}; {tag="what_about_hevjiarr"}; {"[Цветокод]Что станет при этом с людьми?", [[ "Наэтвьирр использует свою мудрость на благо всем вьярам". ]]}; {"[Цветокод]Я ищу способ пробудить Наэтвьирра", [[ "Твой путь лежит в храм. Я дам тебе ключ". ]], code [[ take('item_ven_key_library'); psub('generic'); ]]}; {"[Цветокод]Я ищу путь в первый город", [[ "Твой путь лежит в храм. Я дам тебе ключ". ]], code [[ take('item_ven_key_library'); psub('generic'); ]]}; }; }; ven_east = room { var { state = 0; }; nam = "Венаэданотр, у входа в башню"; dsc = function(s) if (s.state == 0) then s.state = 1; return [[ Вы долго блуждаете по улицам города в поисках пути в башню, стоящую в восточной части города. Оказавшись у входа, вы видите массивные двери, закрывающие вход внутрь. ]]; else return [[ Вы стоите у входа в высокую трехэтажную башню. Массивные каменные двери закрывают вход. ]]; end; end; obj = { 'ven_tower_guard' }; way = { kh_vroom("В башню", "ven_tower_l1"); kh_vroom("В центр", "ven_center"); }; }; ven_tower_guard = npc { nam = "ven_tower_guard"; dsc = [[ У ворот стоит одинокий {стражник}. Он внимательно наблюдает за вашими действиями. ]]; phrases = { "\"Ты проходи\"." }; }; ven_tower_l1 = room { var { state = 0; }; nam = "Венаэданотр, башня, первый этаж"; dsc = [[ Вы стоите на первом этаже башни Венаэданотра. В центре большого зала вы видите три статуи. ]]; obj = { 'ven_statue_navjiarr', 'ven_statue_monster', 'ven_statue_human' }; way = { kh_vroom("Выйти", "ven_east"); kh_vroom("На второй этаж", function(s) if (ven_tower_l1.state == 1) then return "ven_tower_l2"; else pr("Дверь не открывается."); return false; end; end); }; }; ven_tower_l2 = room { var { state = 0; }; nam = "Венаэданотр, башня, второй этаж"; dsc = [[ Второй этаж башни представляет из себя зал примерно таких же размеров, что и первый. ]]; obj = { kh_vway("В центре зала вы видите {пьедестал} с двумя выемками.", 'ven_l2_pedestal'); }; way = { kh_vroom("На первый этаж", "ven_tower_l1"); kh_vroom("На третий этаж", function(s) if (ven_tower_l2.state == 1) then return "ven_tower_l3"; else pr("Дверь не открывается."); return false; end; end ); }; } ven_tower_l3 = room { var { state = 0; }; nam = "Венаэданотр, башня, третий этаж"; dsc = [[ Третий этаж ничем не отличается от первых двух - это большой пустой зал с двумя дверьми в противоположных его концах. ]]; way = { kh_vroom("На второй этаж", "ven_tower_l2"); kh_vroom("На четвертый этаж", function(s) if (ven_tower_l3.state == 1) then return "ven_tower_l4"; else pr("Дверь не открывается."); return false; end; end ); }; } ven_tower_l4 = room { nam = "Венаэданотр, башня, четвертый этаж"; dsc = [[ Зал на четвертом этаже несколько меньше остальных. В стенах зала проделано множество окон, ]]; obj = { 'ven_wiseman' }; way = { kh_vroom("На третий этаж", "ven_tower_l3"); }; } ven_statue_navjiarr = obj { nam = "ven_statue_navjiarr"; dsc = [[ {Первая статуя} изображает молодого навьяра, гордо смотрящего перед собой. ]]; act = [[ Вы осматриваете статую, но не находите ничего интересного. ]]; }; ven_statue_monster = obj { nam = "ven_statue_monster"; dsc = [[ {Вторая статуя} изображает существо с четырьмя руками. Верхняя часть тела существа покрыта гладкой кожей, а нижняя - чешуей. Вместо ног у статуи змеиный хвост. ]]; act = function(s) walk("ven_statue_monster_look"); end; }; ven_statue_human = obj { nam = "ven_statue_human"; dsc = [[ {Последняя статуя} изображает человека, одетого в тогу. ]]; act = [[ Вы осматриваете статую, но не находите ничего интересного. ]]; }; ven_statue_monster_look = room { nam = "Статуя"; dsc = [[ Перед вами статуя четырехрукого существа. Верхняя часть его тела покрыта гладкой кожей, а нижняя - чешуей. Вместо ног у статуи змеиный хвост. В руках статуя держит несколько предметов. ]]; obj = { 'item_ven_gem'; 'item_ven_coin'; 'item_ven_tablet'; 'ven_statue_spear_take'; 'ven_statue_spear_rotate'; }; way = { kh_vroom("Отойти от статуи", "ven_tower_l1"); }; }; ven_statue_spear_take = obj { nam = "ven_statue_spear_take"; dsc = "{Взять копье}"; act = function(s) ven_statue_spear_rotate:enable(); return [[ Копье крепко держится в руке статуи. ]]; end; }; ven_statue_spear_rotate = obj { nam = "ven_statue_spear_rotate"; dsc = "{Повернуть копье}"; act = function(s) ven_tower_l1.state = 1; s:disable(); return [[ Вы поворачиваете копье и дверь в дальнем конце зала открывается. ]]; end; }:disable(); ven_l2_pedestal = room { nam = "ven_l2_pedestal"; dsc = "Прямоугольный пьедестал высотой около метра. На верхней его поверхности вы видите две выемки, рядом с которыми выгравированы изображения."; obj = { 'ven_l2_human'; 'ven_l2_navjiarr'; }; }; ven_l2_human = obj { var { state = 0; }; nam = "ven_l2_human"; dsc = [[ Рядом с первой {выемкой} выгравировано изображение человека-рыбака с удочкой. ]]; act = "Возможно, сюда нужно что-то положить? "; use = function(s, o) if (o == item_ven_coin) then s.state = 1; remove(item_ven_gem, pl); pr "Монета исчезает в глубине выемки."; if (ven_l2_navjiarr.state == 1) then ven_tower_l2.state = 1; pr("Дверь а дальнем конце зала открывается. "); end; return false; else return "Это сюда не подходит."; end; end; }; ven_l2_navjiarr = obj { var { state = 0; }; nam = "ven_l2_navjiarr"; dsc = [[ рядом со второй {выемкой} выгравировано изображение навьяра-охотника. ]]; act = "Возможно, сюда нужно что-то положить? "; use = function(s, o) if (o == item_ven_gem) then s.state = 1; remove(item_ven_gem, pl); pr "Жемчужина исчезает в глубине выемки. "; if (ven_l2_human.state == 1) then ven_tower_l2.state = 1; pr("Дверь а дальнем конце зала открывается. "); end; return false; else return "Это сюда не подходит. "; end; end; }; ven_towers_machine = obj { nam = "ven_towers_machine"; dsc = "В центре зала вы видите странную {машину} - три вращающихся оси, на которых установлено 4 шестеренки. Внизу вы видите какие-то рычаги"; act = function(s) if (not ven_towers_machine_look.solved) then walkin(ven_towers_machine_look); end; end; }; ven_towers_machine_look = room { var { gears = {1,1,1,1}; from = 0; solved = false; }; nam = "Венаэданотр, башня, третий этаж"; pic = function(s) local p = "box:96x48,white,255;box:1x48,black,255@16,0;box:1x48,black,255@48,0;box:1x48,black,255@80,0"; for g = 1,#s.gears do p = p .. ";box:" .. tostring(g * 8) .. "x11,green,255@" .. tostring((s.gears[g] - 1) * 32 + 16 - g * 4) .. "," .. tostring((g - 1) * 12 + 1); end; return p; end; move = function(s, target) local rv = ""; local nums, numt; for g = 1, #s.gears do if (s.gears[g] == s.from) then nums = g; break; end; end; for g = 1, #s.gears do if (s.gears[g] == target) then numt = g; break; end; end; print("f"); print(nums); print(numt); print("/f"); if (not nums or numt and numt < nums) then rv = "Механизм издает легкий щелчок и ничего не происходит. "; else s.gears[nums] = target; rv = "Механизм издает легкий щелчок и одна из шестеренок перемещается на соседнюю ось. "; end; print(s.gears[1]); print(s.gears[2]); print(s.gears[3]); print(s.gears[4]); s.solved = true; for g = 1, #s.gears do if (s.gears[g] ~= 3) then s.solved = false; end; end; if (s.solved) then ven_tower_l3.state = 1; ven_towers_lever1:disable(); ven_towers_lever2:disable(); ven_towers_lever3:disable(); rv = rv .. "Дверь наверх открывается. "; end; ven_towers_lever1.state = 0; ven_towers_lever2.state = 0; ven_towers_lever3.state = 0; ven_towers_machine_look.from = 0; return rv; end; dsc = [[ Странная машина состоит из четырех шестеренок и трех вращающихся осей. Внизу вы видите три рычага. ]]; obj = { 'ven_towers_lever1', 'ven_towers_lever2', 'ven_towers_lever3' }; way = { kh_vroom("Отойти", "ven_tower_l3"); }; }; ven_towers_lever1 = obj { var { state = 0; }; nam = "ven_towers_lever1"; dsc = function(s) if (s.state == 0) then return [[ {Первый рычаг(выключен).}^ ]]; else return [[ {Первый рычаг(включен).}^ ]]; end; end; act = function(s) local rv = [[ Вы переключаете рычаг. ]]; if (s.state == 0) then s.state = 1; if (ven_towers_machine_look.from == 0) then ven_towers_machine_look.from = 1; else rv = rv .. ven_towers_machine_look:move(1); end; else s.state = 0; ven_towers_machine_look.from = 0; end; return rv; end; }; ven_towers_lever2 = obj { var { state = 0; }; nam = "ven_towers_lever2"; dsc = function(s) if (s.state == 0) then return [[ {Второй рычаг(выключен).}^ ]]; else return [[ {Второй рычаг(включен).}^ ]]; end; end; act = function(s) local rv = [[ Вы переключаете рычаг. ]]; if (s.state == 0) then s.state = 1; if (ven_towers_machine_look.from == 0) then ven_towers_machine_look.from = 2; else rv = rv .. ven_towers_machine_look:move(2); end; else s.state = 0; ven_towers_machine_look.from = 0; end; return rv; end; }; ven_towers_lever3 = obj { var { state = 0; }; nam = "ven_towers_lever3"; dsc = function(s) if (s.state == 0) then return [[ {Третий рычаг(выключен).}^ ]]; else return [[ {Третий рычаг(включен).}^ ]]; end; end; act = function(s) local rv = [[ Вы переключаете рычаг. ]]; if (s.state == 0) then s.state = 1; if (ven_towers_machine_look.from == 0) then ven_towers_machine_look.from = 3; else rv = rv .. ven_towers_machine_look:move(3); end; else s.state = 0; ven_towers_machine_look.from = 0; end; return rv; end; }; ven_wiseman = npc { nam = "ven_wiseman"; dsc = [[ Перед одним из окон сидит старый {навьяр}. Левой рукой он опирается на посох. Его глаза внимательно наблюдают за вами. ]]; dlg = "ven_wiseman_dlg"; }; ven_wiseman_dlg = dlg { var { state = 0; }; nam = "Hya'arhe'ysl'rr"; entered = function(s) if (s.state == 0) then psub('first_meeting'); return [[ Навьяр медленно поднимается и его плавники начинают окрашиваться цветными полосами: "Зачем ты здесь, хевьяр?" ]]; else psub('generic'); return [[ Навьяр медленно поднимается и его плавники начинают окрашиваться цветными полосами: "Зачем ты вернулся, хевьяр?" ]]; end; end; phr = { {tag="first_meeting"}; {"[Цветокод]Я ищу Лсэрианотр", [[ "Так значит, ты слышал легенду?" ]], code [[ psub("legend"); ]]}; {"[Цветокод]Я ищу Наэтвьирра", [[ "Так значит, ты слышал легенду?" ]], code [[ psub("legend"); ]]}; {"[Цветокод]Я ищу своего отца. Он отправился на поиски Лсэрианотра", [[ "Так значит, ты идешь за ними. Ты уже слышал легенду?" ]], code [[ psub("legend"); ]]}; {tag="generic"}; {"[Цветокод]I'rr kee'nn", [[ "Ты уходи" ]], code [[ back(); ]]}; {tag="legend"}; {"[Цветокод]Да", [[ "Значит ты знаешь, что Наэтвьирр опасен и не должен пробудиться". ]], code [[ psub("need_to_find"); ]]}; {"[Цветокод]Нет", [[ "Тогда послушай. Этой легенде больше тысячи лет. В те времена навьяры жили в огромных городах и строили машины, помогающие им во всех областях. Однажды навьяры создали Наэтвьирра - машину, способную заменить им вождей. Но, к счастью, большинство навьяров поняли, что Наэтвьирр первым же делом уничтожит навьяров, не нужных ему. Опасаясь включения опасной машины, навьяры навсегда покинули город в надежде, что никто и никогда не найдет его". ]], code [[ psub("need_to_find"); ]]}; {tag="need_to_find"}; {"[Цветокод]Мне нужен ключ от храма", [[ "Я дам тебе его в надежде, так же как дал его тем хевьярам. Надеюсь, ты примешь верное решение. Теперь уходи. Оставь меня в покое". ]], code [[ take("item_ven_key_tower"); back(); ]]}; }; }; ven_near_temple = room { nam = "Ущелье, У входа в храм Венаэданотра"; dsc = [[ Вы стоите на дне глубокого ущелья. Вход навьярского храма, вытесанный в камне, украшен резными изображениями сцен из легенд, и покрыты древними письменами, чей смысл утрачен ныне даже для навьяров. ]]; way = { kh_vroom("К храму", "ven_temple"); kh_vroom("В Левиафан", "leviathan_airlock"); }; }; ven_temple_entrance = room { var { state = 0; }; nam = "Храм Венаэданотра, вход"; dsc = function(s) if (s.state == 3) then return [[ Массивные двери храма Ведаэданотра открыты, позволяя вам пройти. ]]; else return [[ Вход в храм Венаэданотра закрывают массивные металлические двери. На дверях вы видите три замочных скважины. ]]; end; end; way = { kh_vroom("В ущелье", "ven_near_temple"); kh_vroom("В храм", function(s) if (ven_temple_entrance.state == 3) then return "ven_temple_l1"; else pr("Двери не открываются"); end; end); }; obj = { 'ven_temple_lock_red', 'ven_temple_lock_green', 'ven_temple_lock_blue' }; }; ven_temple_lock_red = obj { var { state = 0; }; nam = "ven_temple_lock_red"; dsc = "{Первая скважина} отмечена красным цветом.^"; act = function(s) if (s.state == 1) then return "Этот замок уже открыт. "; else return "Мне нужен ключ. "; end; end; use = function(s, o) if (o == item_ven_key_chieftain) then ven_temple_entrance.state = ven_temple_entrance.state + 1; remove(o, pl); pr("Вы вставляете ключ в скважину и поворачиваете его. "); if (ven_temple_entrance == 3) then pr("Двери с грохотом раздвигаются, открывая вам проход во внутренние помещения храма. "); end; return false; else return "Это сюда не подходит. "; end; end; }; ven_temple_lock_green = obj { var { state = 0; }; nam = "ven_temple_lock_green"; dsc = "{Вторая скважина} отмечена красным цветом.^"; act = function(s) if (s.state == 1) then return "Этот замок уже открыт. "; else return "Мне нужен ключ. "; end; end; use = function(s, o) if (o == item_ven_key_library) then ven_temple_entrance.state = ven_temple_entrance.state + 1; remove(o, pl); pr("Вы вставляете ключ в скважину и поворачиваете его. "); if (ven_temple_entrance == 3) then pr("Двери с грохотом раздвигаются, открывая вам проход во внутренние помещения храма. "); end; return false; else return "Это сюда не подходит. "; end; end; }; ven_temple_lock_blue = obj { var { state = 0; }; nam = "ven_temple_lock_blue"; dsc = "{Третья скважина} отмечена красным цветом.^"; act = function(s) if (s.state == 1) then return "Этот замок уже открыт. "; else return "Мне нужен ключ. "; end; end; use = function(s, o) if (o == item_ven_key_tower) then s.state = 1; ven_temple_entrance.state = ven_temple_entrance.state + 1; remove(o, pl); pr("Вы вставляете ключ в скважину и поворачиваете его. "); if (ven_temple_entrance == 3) then pr("Двери с грохотом раздвигаются, открывая вам проход во внутренние помещения храма. "); end; return false; else return "Это сюда не подходит. "; end; end; }; ven_temple_l1 = labyrinth { var { position = "03"; lock1 = true; lock2 = true; lock3 = true; }; dir1 = "На север"; dir2 = "На восток"; dir3 = "На юг"; dir4 = "На запад"; ex = "Выйти"; nam = "ven_temple_l1"; disp = "Венаэданотр, храм"; dsc = function(s) --if true then -- return tostring(s.position); --end; if (s.map[s.position].name) then return s.map[s.position].name; else return [[ Вы стоите посреди запутанного лабиринта. Металлические стены по сторонам здесь ничем не отличаются от стен в других коридорах этого лабиринта. ]]; end; end; enter = function(s) if (exist(ven_shark, s) and ven_shark.active) then local no = s.map[ven_shark.position].e1; local ea = s.map[ven_shark.position].e2; local so = s.map[ven_shark.position].e3; local we = s.map[ven_shark.position].e4; if (no and s.oldposition == no or no and s.position == no) then walk(game_over_eaten_by_shark); end; if (no and s.oldposition == s.map[no].e1) then ven_shark.position = no; end; if (ea and s.oldposition == ea) then walk(game_over_eaten_by_shark); end; if (ea and s.oldposition == s.map[ea].e2) then ven_shark.position = ea; end; if (so and s.oldposition == so) then walk(game_over_eaten_by_shark); end; if (so and s.oldposition == s.map[so].e3) then ven_shark.position = so; end; if (we and s.oldposition == we) then walk(game_over_eateon_by_shark); end; if (we and s.oldposition == s.map[we].e4) then ven_shark.position = we; end; if (no and s.oldposition == s.map[no].e2) then ven_shark.position = no; end; if (ea and s.oldposition == s.map[ea].e1) then ven_shark.position = ea; end; if (no and s.oldposition == s.map[no].e4) then ven_shark.position = no; end; if (we and s.oldposition == s.map[we].e1) then ven_shark.position = we; end; if (so and s.oldposition == s.map[so].e2) then ven_shark.position = so; end; if (ea and s.oldposition == s.map[ea].e3) then ven_shark.position = ea; end; if (so and s.oldposition == s.map[so].e4) then ven_shark.position = so; end; if (we and s.oldposition == s.map[we].e3) then ven_shark.position = we; end; end; end; obj = { "ven_octopus"; }; map = { ["00"] = { e1 = "10"; e2 = "01"; }; ["01"] = { e4 = "00"; enter = function(s) if (not exist(ven_chest, s)) then move(ven_chest, s); end; end; exit = function(s) remove(ven_chest, s); end; }; ["02"] = { e1 = "12"; e2 = "03"; }; ["03"] = { name = [[ Вы стоите у входа в храм. ]]; e1 = "13"; e2 = "04"; e4 = "02"; ex = "ven_temple_entrance"; e1lock = function(s) return lock03; end; }; ["04"] = { e1 = "14", e2 = "05", e4 = "03" }; ["05"] = { e1 = "15", e2 = "06", e4 = "04" }; ["06"] = { e1 = "16"; e2 = "07"; e4 = "05"; }; ["07"] = { e4 = "06" }; ["10"] = { e1 = "20", e3 = "00" }; ["11"] = { e2 = "12", enter = function(s) if (not exist(ven_skeleton, s)) then move(ven_skeleton, s); end; if (not item_ven_spear.taken and not exist(item_ven_spear, s)) then move(item_ven_spear, s); end; end; exit = function(s) remove(ven_skeleton, s); if (not item_ven_spear.taken) then remove(item_ven_spear, s); end; end; }; ["12"] = { e3 = "02", e4 = "11" }; ["13"] = { e1 = "23", e3 = "03" }; ["14"] = { e1 = "24"; e3 = "04"; }; ["15"] = { e3 = "05"; }; ["16"] = { e1 = "26"; e3 = "06"; }; ["17"] = { e1 = "27"; enter = function(s) if (not exist(ven_cache, s)) then move(ven_cache, s); end; end; exit = function(s) remove(ven_cache, s); end; }; ["20"] = { e1 = "30"; e2 = "21"; e3 = "10"; enter = function(s) if (not exist(ven_shark, s)) then move(ven_shark, s); end; end; }; ["21"] = { e2 = "22"; e4 = "20"; }; ["22"] = { e2 = "23"; e4 = "21"; }; ["23"] = { e3 = "13"; e4 = "22"; }; ["24"] = { e1 = "34"; e3 = "14"; }; ["25"] = { e1 = "35"; e2 = "26"; }; ["26"] = { e3 = "16"; e4 = "25"; enter = function(s) walk(game_over_eaten_by_octopus); end; }; ["27"] = { e1 = "37"; e3 = "17"; }; ["30"] = { e2 = "31"; e3 = "20"; }; ["31"] = { e1 = "41"; e4 = "30"; }; ["32"] = { e1 = "42"; e2 = "33"; }; ["33"] = { e2 = "34"; e4 = "32"; }; ["34"] = { e3 = "24"; e4 = "33"; }; ["35"] = { e1 = "45"; e2 = "36"; e3 = "25"; }; ["36"] = { e2 = "37"; e4 = "35"; }; ["37"] = { e1 = "47"; e3 = "27"; e4 = "36"; e3lock = function(s) return s.lock2; end; }; ["40"] = { e1 = "50"; e2 = "41"; }; ["41"] = { e3 = "31"; e4 = "40"; }; ["42"] = { e2 = "43"; e3 = "32"; }; ["43"] = { e1 = "53"; e2 = "44"; e4 = "42"; }; ["44"] = { e2 = "45"; e4 = "43"; }; ["45"] = { name = [[ Вы стоите посреди запутанного лабиринта. Металлические стены по сторонам здесь ничем не отличаются от стен в других коридорах этого лабиринта, за исключением двери на юге. ]]; e3 = "35"; e4 = "44"; e3lock = function(s) return s.lock1; end; enter = function(s) if (not exist(ven_first_lock, s)) then move(ven_first_lock, s); end; end; exit = function(s) remove(ven_first_lock, s); end; }; ["46"] = { e1 = "56"; enter = function(s) if (not exist(ven_lever, s)) then move(ven_lever, s); end; end; exit = function(s) remove(ven_lever, s); end; }; ["47"] = { e1 = "57"; e3 = "37"; }; ["50"] = { e1 = "60"; e3 = "40"; }; ["51"] = { e1 = "61"; e2 = "52"; }; ["52"] = { e2 = "53"; e4 = "51"; }; ["53"] = { e1 = "63"; e3 = "43"; e4 = "52"; }; ["54"] = { e1 = "64"; e2 = "55"; }; ["55"] = { e2 = "56"; e4 = "54"; }; ["56"] = { name = [[ Вы стоите посреди запутанного лабиринта. Металлические стены по сторонам здесь ничем не отличаются от стен в других коридорах этого лабиринта, за исключением двери на западе. ]]; e1 = "66"; e3 = "46"; e4 = "55"; e4lock = function(s) return s.lock3; end; enter = function(s) if (not exist(ven_second_lock, s)) then move(ven_second_lock, s); end; end; exit = function(s) remove(ven_second_lock, s); end; }; ["57"] = { e1 = "67"; e3 = "47"; }; ["60"] = { e1 = "70"; e2 = "61"; e3 = "50"; }; ["61"] = { e3 = "51"; e4 = "60"; }; ["62"] = { e1 = "72"; e2 = "63"; }; ["63"] = { e3 = "53"; e4 = "62"; }; ["64"] = { e1 = "74"; e3 = "54"; }; ["65"] = { e1 = "75"; e2 = "66"; }; ["66"] = { e3 = "56"; e4 = "65"; }; ["67"] = { e1 = "77"; e3 = "57"; }; ["70"] = { e2 = "71"; e3 = "60"; }; ["71"] = { e2 = "72"; e4 = "70"; }; ["72"] = { e3 = "62"; e4 = "71"; }; ["73"] = { e2 = "74"; ex = "ven_temple_l2"; }; ["74"] = { e3 = "64"; e4 = "73"; }; ["75"] = { e2 = "76"; e3 = "65"; }; ["76"] = { e2 = "77"; e4 = "75"; }; ["77"] = { e3 = "67"; e4 = "76"; }; }; }; ven_shark = obj { var { position = "00", active = true; }; nam = "ven_shark"; dsc = function(s) --local d = 0; local seen = false; local no = ven_temple_l1.map[ven_temple_l1.position].e1; local ea = ven_temple_l1.map[ven_temple_l1.position].e2; local so = ven_temple_l1.map[ven_temple_l1.position].e3; local we = ven_temple_l1.map[ven_temple_l1.position].e4; if (s.position == ven_temple_l1.position) then seen = true; p [[ Рядом с собой ]]; end; if (no and s.position == no) then seen = true; p [[ На севере ]]; end; if (no and s.position == ven_temple_l1.map[no].e1) then seen = true; p [[ Вдалеке на севере ]]; end; if (ea and s.position == ea) then seen = true; p [[ На востоке ]]; end; if (ea and s.position == ven_temple_l1.map[ea].e2) then seen = true; p [[ Вдалеке на востоке ]]; end; if (so and s.position == so) then seen = true; p [[ На юге ]]; end; if (so and s.position == ven_temple_l1.map[so].e3) then seen = true; p [[ Вдалеке на юге ]]; end; if (we and s.position == we) then seen = true; p [[ На западе ]]; end; if (we and s.position == ven_temple_l1.map[we].e4) then seen = true; p [[ Вдалеке на западе ]]; end; if (no and s.position == ven_temple_l1.map[no].e2 or ea and s.position == ven_temple_l1.map[ea].e1) then seen = true; p [[ На северо-востоке ]]; end; if (no and s.position == ven_temple_l1.map[no].e4 or we and s.position == ven_temple_l1.map[we].e1) then seen = true; p [[ На северо-западе ]]; end; if (so and s.position == ven_temple_l1.map[so].e2 or ea and s.position == ven_temple_l1.map[ea].e3) then seen = true; p [[ На юго-востоке ]]; end; if (so and s.position == ven_temple_l1.map[so].e4 or we and s.position == ven_temple_l1.map[we].e3) then seen = true; p [[ На юго-западе ]]; end; if (seen) then if (s.active) then p "вы видите мчащуюся к вам навстречу {акулу}. "; else p "вы видите мертвую акулу, пронзенную коралловым копьем. "; end; else if (s.active) then p [[ Где-то в лабиринте вас поджидает кровожадная акула. ]]; else return false; end; end; end; used = function(s, o) print("fuck you dinosaur shark"); if (o == item_ven_spear) then local no = ven_temple_l1.map[ven_temple_l1.position].e1; local ea = ven_temple_l1.map[ven_temple_l1.position].e2; local so = ven_temple_l1.map[ven_temple_l1.position].e3; local we = ven_temple_l1.map[ven_temple_l1.position].e4; if (s.position == no or s.position == ea or s.position == so or s.position == we) then remove(item_ven_spear, pl); s.active = false; return [[ Вы протыкаете акулу копьем. Она несколько раз дергается и затихает. Копье застревает в теле рыбы и вы не можете вытащить его. ]]; else return [[ Акула слишком далеко. ]]; end; end; end; }; ven_chest = obj { var { state = 0; }; nam = "ven_chest"; dsc = [[ В конце коридора стоит запертый {сундук}. ]]; act = function(s) walkin("ven_chest_look"); end; }; ven_chest_look = room { var { state = {0,0,0,0}; taken = false; }; nam = "ven_chest_look"; disp = "Венаэданотр, храм"; pic = function(s) local p = "images/ven_chest.png"; for i = 1, #s.state do p = p .. ";images/ven_chest_" .. tostring(s.state[i]) .. ".png@" .. tostring((i - 1) * 16) .. ",64"; end; return p; end; dsc = function(s) return [[ На поверхности сундука вы видите обозначения из цветных полос - очевидно это какое-то сообщение. На крышке вы видите четыре вращающихся кольца, на которые нанесены метки шести цветов: фиолетовый, синий, зеленый, желтый, оранжевый, красный. ]]; end; checkLock = function(s) if (s.state[1] == 5 and s.state[2] == 3 and s.state[3] == 3 and s.state[4] == 2) then stead.ref("ven_chest_open"):enable(); return true; else stead.ref("ven_chest_open"):disable(); return false; end; end; obj = { 'ven_chest_ring1'; 'ven_chest_ring2'; 'ven_chest_ring3'; 'ven_chest_ring4'; 'ven_chest_open'; 'ven_chest_away'; }; }; ven_chest_ring1 = kh_vobj("ven_chest_ring1", "{Повернуть первое кольцо.}^", function(s) here().state[1] = here().state[1] + 1; if (here().state[1] > 5) then here().state[1] = 0; end; local t = "Вы поворачиваете кольцо на одно деление. "; if (here():checkLock()) then t = t .. "Вы слышите легкий щелчок. "; end; return t; end); ven_chest_ring2 = kh_vobj("ven_chest_ring2", "{Повернуть второе кольцо.}^", function(s) here().state[2] = here().state[2] + 1; if (here().state[2] > 5) then here().state[2] = 0; end; local t = "Вы поворачиваете кольцо на одно деление. "; if (here():checkLock()) then t = t .. "Вы слышите легкий щелчок. "; end; return t; end); ven_chest_ring3 = kh_vobj("ven_chest_ring3", "{Повернуть третье кольцо.}^", function(s) here().state[3] = here().state[3] + 1; if (here().state[3] > 5) then here().state[3] = 0; end; local t = "Вы поворачиваете кольцо на одно деление. "; if (here():checkLock()) then t = t .. "Вы слышите легкий щелчок. "; end; return t; end); ven_chest_ring4 = kh_vobj("ven_chest_ring4", "{Повернуть четвертое кольцо.}^", function(s) here().state[4] = here().state[4] + 1; if (here().state[4] > 5) then here().state[4] = 0; end; local t = "Вы поворачиваете кольцо на одно деление. "; if (here():checkLock()) then t = t .. "Вы слышите легкий щелчок. "; end; return t; end); ven_chest_open = kh_vobj("ven_chest_open", "{Открыть сундук.}^", function(s) if (not here().taken) then here().taken = true; take(item_ven_temple_key_1); return "В сундуке вы находите металлический ключ. "; else return "Сундук пуст"; end; end):disable(); ven_chest_away = kh_vobj("ven_chest_away", "{Отойти от сундука.}^", function(s) back(); end); ven_first_lock = obj { nam = "ven_first_lock"; dsc = "В двери вы видите {замочную скважину}. "; used = function(s, o) print "fuckersaurus" if (o == item_ven_temple_key_1) then remove(item_ven_temple_key_1, pl); ven_temple_l1.lock1 = false; path('e3'):enable(); return "Вы открываете дверь. "; end; return "Это сюда не подходит. "; end; }; ven_lever = obj { nam = "ven_lever"; dsc = "В южной стене расположен небольшой {рычаг}. "; act = function(s) ven_temple_l1.lock2 = not ven_temple_l1.lock2; return "Вдалеке вы слышите скрежет металла. "; end; } ven_second_lock = obj { nam = "ven_second_lock"; dsc = "В двери вы видите {замочную скважину}. "; used = function(s, o) if (o == item_ven_temple_key_2) then remove(item_ven_temple_key_2, pl); ven_temple_l1.lock3 = false; path('e4'):enable(); return "Вы открываете дверь. "; end; return "Это сюда не подходит. "; end; }; ven_cache = obj { var { state = 0 }; nam = "ven_cache"; dsc = function(s) if (s.state >= 1) then return [[ В южной стене открыта {выемка}. ]]; else return [[ В южной стене имеется небольшую {прорезь}. ]]; end; end; act = function(s) if (s.state == 1) then s.state = 2; move(item_ven_temple_key_2, pl); return [[ В выемке вы находите ключ. ]]; end; end; used = function(s, o) if (s.state == 0) then if (o == item_ven_tablet) then s.state = 1; remove(item_ven_tablet, pl); return "Пластинка легко уходит вглубь прорези. Вы слышите щелчок и в стене открывается выемка, в которой лежит ключ. "; end; end; end; }; ven_skeleton = obj { nam = "ven_skeleton"; dsc = [[ У одной из стен вы видите {скелет навьяра}. ]]; act = [[ Этот скелет очень старый. ]]; }; item_ven_temple_key_1 = obj { nam = "item_ven_temple_key_1"; disp = "Ключ из храма"; dsc = [[ Металлический ключик, найденный вами в храме Венаэданотра. ]]; }; item_ven_temple_key_2 = obj { nam = "item_ven_temple_key_2"; disp = "Ключ из тайника"; dsc = [[ Металлический ключик, найденный вами в тайнике в храме Венаэданотра. ]]; } item_ven_spear = obj { var { taken = false; }; nam = "item_ven_spear"; disp = "Копье"; dsc = [[ В правой руке скелета вы видите {коралловое копье}. ]]; inv = [[ Коралловое копье, найденное вами в лабиринте храма Венаэданотра. ]]; tak = function(s) s.taken = true; return [[ Вы забираете копье себе. ]]; end; }; ven_octopus = obj { nam = "ven_octopus"; dsc = function(s) if (ven_temple_l1.position == "06") then return "Вдалеке к северу вы видите гигантского спрута. Чудовище, кажется, совершенно не заинтересовано вами, однако оно полностью закрывает проход. "; elseif (ven_temple_l1.position == "16") then return "К северу вы видите гигантского спрута. Чудовище, кажется, совершенно не заинтересовано вами, однако оно полностью закрывает проход. "; elseif (ven_temple_l1.position == "25") then return "К востоку вы видите гигантского спрута. Чудовище, кажется, совершенно не заинтересовано вами, однако оно полностью закрывает проход. "; end; return false; end; act = [[ "Лучше к нему не приближаться". ]]; }; ven_temple_l2 = room { nam = "Венаэданотр, храм, второй этаж"; dsc = [[ Второй этаж храма представляет собой небольшой зал с металлическими стенами. В западной стене вы видите несколько окон, через которые открывается вид на ущелье. В северной части вы видите едва заметный проход. ]]; obj = { 'ven_pedestal' }; way = { kh_vroom("На первый этаж", "ven_temple_l1"); kh_vroom("В проход на севере", "ven_near_temple"); }; }; ven_pedestal = obj { var { taken = false; }; nam = "ven_pedestal"; dsc = function(s) if (s.taken) then return [[ Пьедестал в центре зала пуст. ]]; else return [[ На пьедестале в центре зала вы видите небольшую металлическую пластину - судя по обозначениям это {фрагмент карты}. ]]; end; end; act = function(s) if (not s.taken) then s.taken = true; put(item_navjiarr_chart_ven); return [[ Вы забираете фрагмент карты себе. ]]; end; end; };