diff --git a/atlantis_catching_the_tail.lua b/atlantis_catching_the_tail.lua --- a/atlantis_catching_the_tail.lua +++ b/atlantis_catching_the_tail.lua @@ -1,4 +1,7 @@ -ctt_iraa_entrance = room { +--[[ + iraa'pha'anot'rr +]] +ctt_iraa_city = room { nam = "Центр Ираафаанотра"; dsc = [[ Вы находитесь у центра навьярского поселения Ираафаанотр. Поверхность под вами словно сделана из цельного куска камня. Несколько каменных строений возвышаются поблизости. @@ -371,7 +374,686 @@ ctt_iraa_l1_end = darkroom { Вы находитесь в темной пещере. ]]; way = { - kh_vroom("Подняться", "ctt_iraa_l2_entrance", 1); + kh_vroom("Подняться", "ctt_iraa_l2", 1):disable(); kh_vroom("Назад", "ctt_iraa_l1", 1); }; -}; \ No newline at end of file + + life = function(s) + if (ctt_iraa_keyhole1.key_in == item_ctt_iraa_key3 and + ctt_iraa_keyhole2.key_in == item_ctt_iraa_key1 and + ctt_iraa_keyhole3.key_in == item_ctt_iraa_key2) then + path("Подняться"):enable(); + else + path("Подняться"):disable(); + end; + end; + + obj = { + 'ctt_iraa_keyholes' + 'ctt_iraa_keyhole1' + 'ctt_iraa_keyhole2' + 'ctt_iraa_keyhole3' + }; +}; + +ctt_iraa_keyholes = obj { + nam = "ctt_iraa_keyholes"; + seen_level = 2; + dsc = function(s) + if (pl.has_light) then + return [[ + Перед собой вы видите три замочные скважины, расположенные одна над другой, визуально почти ничем не отличающиеся: + ]]; + else + return [[ + Перед собой вы видите три замочные скважины, расположенные одна над другой: + ]]; + end; + end; +}; + +ctt_iraa_keyhole1 = obj { + var = { + key_in = nil + }; + nam = "ctt_iraa_keyhole1"; + seen_level = 2; + dsc = function(s) + if (s.key_in) then + return [[ + В {верхнюю скважину} вставлен ключ. ^ + ]]; + elseif (pl.has_light) then + return [[ + {Верхняя скважина} пуста. ^ + ]]; + else + return [[ + Из {верхней скважины} исходит слабое синеватое свечение. + ]]; + end; + end; +}; + +ctt_iraa_keyhole2 = obj { + var = { + key_in = nil; + }; + nam = "ctt_iraa_keyhole2"; + seen_level = 2; + dsc = function(s) + if (s.key_in) then + return [[ + В {среднюю скважину} вставлен ключ. ^ + ]]; + elseif (pl.has_light) then + + return [[ + {Средняя скважина} пуста. ^ + ]]; + else + return [[ + Из {средней скважины} исходит слабое красноватое свечение. + ]]; + end; + end; +}; + +ctt_iraa_keyhole3 = obj { + var = { + key_in = nil; + }; + nam = "ctt_iraa_keyhole1"; + seen_level = 2; + dsc = function(s) + if (s.key_in) then + return [[ + В {нижнюю скважину} вставлен ключ. ^ + ]]; + elseif (pl.has_light) then + return [[ + {Нижняя скважина} пуста. ^ + ]]; + else + return [[ + Из {нижней скважины} вы видите слабое зеленоватое свечение. + ]]; + end; + end; + use = function(s, o) + if (s.key_in) then + take(s.key_in); + s.key_in = nil; + return [[ + Вы забираете ключ. + ]]; + else + if (o == item_ctt_iraa_key1 or o == item_ctt_iraa_key2 or o == item_ctt_iraa_key3) then + s.key_in = o; + remove(s.key_in); + return [[ + Вы вставляет ключ в скважину. + ]]; + end; + return [[ + Это сюда не подходит. + ]]; + end; + end; +}; + +ctt_iraa_l2 = darkroom { + nam = "Храм Ираафаанотра, второй этаж"; + dsc_halflit = [[ + Большая круглая пещера. В центре ее вы видите три совершенно одинаковых пьедестала + ]]; + dsc_dark = [[ + В темноте вы ничего не видите. + ]]; + way = { + kh_vroom("Подняться", "ctt_iraa_l3", 1):disable(); + kh_vroom("Спуститься", "ctt_iraa_l1_end", 1); + }; + obj = { + "ctt_iraa_pedestal1"; + "ctt_iraa_pedestal2"; + "ctt_iraa_pedestal3"; + }; +}; + +item_ctt_iraa_spear = obj { + nam = "item_ctt_iraa_spear"; + disp = "Копье"; + inv = [[ + Коралловое копье. + ]]; +}; + +ctt_iraa_pedestal1 = obj { + var { + state = 0; + }; + nam = "ctt_iraa_pedestal1"; + dsc = function(s) + if (s.state == 0) + return [[ + На {пьедестале слева} установлено коралловое копье. + ]]; + else + return [[ + Пьедестал слева пуст. + ]]; + end; + end; + act = function(s) + if (s.state == 0) then + s.state = 1; + return [[ + Копье рассыпается у вас в руках. + ]]; + else + return [[ + Пьедестал пуст. + ]]; + end; + end; +}; + +ctt_iraa_pedestal2 = obj { + var { + state = 0; + }; + nam = "ctt_iraa_pedestal2"; + dsc = function(s) + if (s.state == 0) + return [[ + На {центральном пьедестале} установлено коралловое копье. + ]]; + else + return [[ + Центральный пьедестал пуст. + ]]; + end; + end; + act = function(s) + if (s.state == 0) then + s.state = 1; + take(item_ctt_iraa_spear); + path("Подняться"):enable(); + return [[ + Вы забираете копье. Из дальнего конца пещеры вы слышите скрежет и видите, как массивная каменная плита открывает проход на третий этаж. + ]]; + else + return [[ + Пьедестал пуст. + ]]; + end; + end; +}; + +ctt_iraa_pedestal3 = obj { + var { + state = 0; + }; + nam = "ctt_iraa_pedestal1"; + dsc = function(s) + if (s.state == 0) + return [[ + На {пьедестале справа} установлено коралловое копье. + ]]; + else + return [[ + Пьедестал справапуст. + ]]; + end; + end; + act = function(s) + if (s.state == 0) then + s.state = 1; + return [[ + Копье рассыпается у вас в руках. + ]]; + else + return [[ + Пьедестал пуст. + ]]; + end; + end; +}; + +ctt_iraa_l3 = darkroom { + nam = "Храм Ираафаанотра, третий этаж"; + dsc_halflit = [[ + Вы находитесь в небольшом коридоре. + ]]; + dsc_dark = [[ + В темноте вы ничего не видите, кроме зияющего вдалеке выхода наружу. + ]]; + obj = { + "ctt_iraa_statue1"; + "ctt_iraa_statue2"; + "ctt_iraa_statue3"; + }; + way = { + kh_vroom("Спуститься", "ctt_iraa_l2", 1); + kh_vroom("Подняться", "ctt_iraa_top", 1); + }; +}; + +ctt_iraa_statue1 = obj { + var { + has_spear = false; + }; + nam = "ctt_iraa_statue1"; + seen_level = 1; + dsc = function(s) + if (s.has_spear) then + return [[ + Первая {статуя} держит в руках коралловое копье. + ]]; + else + return [[ + Первая {статуя} стоит с протянутыми руками. + ]]; + end; + end; + act = function(s) + if (s.has_spear) then + take(item_ctt_iraa_spear); + + return [[ + Вы забираете копье. + ]]; + end; + end; + use = function(s, o) + if (o == item_ctt_iraa_spear) then + remove(item_ctt_iraa_spear); + s.has_spear = true; + return [[ + Вы помещаете копье в протянутые руки статуи. Ничего не происходит + ]]; + end; + + return [[ + Это сюда не подойдет. + ]]; + end; +}; + +ctt_iraa_statue2 = obj { + var { + has_spear = false; + }; + nam = "ctt_iraa_statue2"; + seen_level = 1; + dsc = function(s) + if (s.has_spear) then + return [[ + Вторая {статуя} держит в руках коралловое копье. + ]]; + else + return [[ + Вторая {статуя} стоит с протянутыми руками. + ]]; + end; + end; + use = function(s, o) + if (o == item_ctt_iraa_spear) then + remove(item_ctt_iraa_spear); + take(item_navjiarr_chart_iraa); + s.has_spear = true; + return [[ + Вы помещаете копье в протянутые руки статуи. Табличка на постаменте статуи отодвигается в сторону и в открывшейся нише вы находите фрагмент навьярской карты. + ]]; + end; + + return [[ + Это сюда не подойдет. + ]]; + end; +}; + +ctt_iraa_statue3 = obj { + var { + has_spear = false; + }; + nam = "ctt_iraa_statue3"; + seen_level = 1; + dsc = function(s) + if (s.has_spear) then + return [[ + Последняя {статуя} держит в руках коралловое копье. + ]]; + else + return [[ + Последняя {статуя} стоит с протянутыми руками. + ]]; + end; + end; + act = function(s) + if (s.has_spear) then + take(item_ctt_iraa_spear); + + return [[ + Вы забираете копье. + ]]; + end; + end; + use = function(s, o) + if (o == item_ctt_iraa_spear) then + remove(item_ctt_iraa_spear); + s.has_spear = true; + return [[ + Вы помещаете копье в протянутые руки статуи. Ничего не происходит + ]]; + end; + + return [[ + Это сюда не подойдет. + ]]; + end; +}; + +ctt_iraa_top = room { + nam = "Храм Ираафаанотра, вершина скалы"; + dsc = [[ + Вы стоите на вершине скалы, рядом с задним входом в храм Ираафаанотра. Внизу вы видите ожидающий вас Левиафан. Аккуратная лестница, вырезанная в скале позволит вам легко спуститься вниз, к гланому входу. + ]]; + way = { + kh_vroom("Вернуться в храм", "ctt_iraa_l3"); + kh_vroom("Спуститься к главному входу", "ctt_iraa_near_temple"); + }; +}; + +--[[ + Dyp'atre'anot'rr +]] + +ctt_dyp_city = room { + nam = "Дипатреанотр"; + dsc = [[ + Вы находитесь на окраине Дипатреанотра. + ]]; + way = { + kh_vroom("В Левиафан", "leviathan_airlock"); + }; + obj = { + + }; +}; + +ctt_dyp_guards = npc { + nam = "ctt_dyp_guards"; + dsc = [[ + Четверо {стражников} стоят перед вами. Они запрещают вам входить в город: "[Ты в-город-не-пройдешь]". + ]]; + phr = { + "Ты в-город-не-пройдешь", + "Ты не-входи", + "He'vji'a'rr не-войдет" + }; +}; + +ctt_dyp_priest = npc { + nam = "ctt_dyp_priest"; + dsc = [[ + Рядом со стражниками стоит пожилой {навьяр}. На шее у него ожерелье из кораллов, а в правой руке - посох, на вершине которого укреплен металлический диск. + ]]; + dlg = "ctt_dyp_priest_dlg"; +}; + +ctt_dyp_priest_dlg = dlg { + var { + state = 0; + }; + nam = "Жрец"; + entered = function(s) + if (s.state == 0 and have(item_navjiarr_chart_1)) then + pon("have_map"); + end; + return [[ + Навьяр привествует вас: "[Я рад-видеть вас]". + ]]; + end; + phr = { + {"[Я ищу Лсэрианотр]", [[ + Навьяр выглядит изумленно. Стражники переглядываются, не зная, как быть. Некоторое время он раздумывает, как поступить и наконец отвечает: [Хевьяр туда не идет]. + ]], code [[ psub('lseryanotrr'); ]]}; + {tag="have_map", false, "[Мне нужня эта карты][показать фрагмент карты]", [[ + Навьяр с интересом разглядывает металлическую пластинку. Через некоторое время он сообщает вам: "[У нас есть то, что вы ищете. Это в храме. Хевьяр должен пройти испытание, чтобы попасть в храм]". Он рисует посохом на земле схему пути в храм Дипатреанотра. После чего стирает ее и говорит: "Ты возвращайся, когда пройдешь испытание". + ]], code [[ ctt_dyp_priest_dlg.state = 1; dypatreanotrr_temple_found = true; back(); ]]}; + {always=true, "[Я пойду]", [[ + Навьяр остается не подвижен. + ]], code [[ back(); ]]}; + {tag="lseryanotrr"} + {"[Почему?]", [[ + [Лсэрианотр - город навьяров. Хевьяр туда не идет]. + ]]}; + {"[Вы знаете, где он находится?]", [[ + [Хевьяр туда не идет. Об этом не говорим больше]. + ]], code [[ pret(); ]]}; + }; +}; + +ctt_dyp_temple_entrance = room { + nam = "Храм Дипатреанотра, вход"; + dsc = [[ + Храм Дипатреанотра, так же как и другие храмы навьяров, располагается внутри скалы. Вы находитесь перед главным входом - массивные каменные двери закрывают проход в скале, ведующий внутрь храма. Двери украшены орнаментом в виде спирали, закручиващейся против часовой стрелки. + ]]; + obj = { + "ctt_dyp_temple_guard" + }; + way = { + kh_vroom("В храм", function(s) + ctt_dyp_temple_l1.px = 1; + ctt_dyp_temple_l1.py = 0; + return "ctt_dyp_temple_l1"; + end):disable(); + kh_vroom("В Левиафан", "leviathan_airlock"); + }; +}; + +ctt_dyp_temple_guard = npc { + nam = "ctt_dyp_temple_guard"; + dsc = function(s) + if (ctt_dyp_temple_guard_dlg.state == 0) then + return [[ + У ворот стоит навьяр, вооруженный копьем. При вашем приближении он спрашивает: "[Зачем ты здесь, Хевьяр?]" + ]]; + else + return [[ + У ворот стоит навьяр, вооруженный копьем. + ]]; + end; + end; + dlg = "ctt_dyp_temple_guard_dlg"; +}; + +ctt_dyp_temple_guard_dlg = dlg { + var { + state = 0; + }; + nam = "Страж храма"; + entered = function(s) + if (s.state == 0) then + s.state = 1; + return [[ + "[Зачем ты здесь, Хевьяр?]" + ]]; + else + back(); + return [[ + "[Ты уходи]". + ]]; + end; + end; + phr = { + {always=true, "[Жрец направил меня сюда пройти испытание]", [[ + Страж кланяется: "Проходи, Хевьяр". После чего он отходит от ворот, и те начинают открываться. + ]], code [[ back(); ]]}; + }; +}; + +ctt_dyp_temple_l1_map = { + {"в югозападном углу", "у южной стены", "в юговосточном углу"}, + {"у западной стены", "в центре", "у восточной стены"}, + {"в северозападном углу", "у северной стены", "в северовосточном углу"}, +}; + +ctt_dyp_temple_l1 = room { + var { + was_seen = false; + px = 3; + py = 1; + path = {1}; + cpath = {1,4,7,8,9,6,3,2,5}; + solved = true; + }; + nam = "Храм Дипатреанотра, первый этаж"; + dsc = function(s) + if (s.solved) then + return [[ + Вы находитесь в большом квадратном зале. Пол состоит из девяти нажимных плит, на одной из которых вы и стоите. Все плиты находятся в нажатом состоянии. + ]]; + else + return [[ + Вы находитесь ]].. ctt_dyp_temple_l1_map[s.py][s.px] ..[[ зала. Пол состоит из девяти нажимных плит, на одной из которых вы и стоите. + ]]; + end; + end; + check = function(s) + if (s.solved) then + return; + end; + local pos = s.px * s.py; + local has = false; + for i = 1, #s.path do + if (s.path[i] == pos) then + has = true; + end; + end; + if (not has) then + if (s.cpath[#s.path + 1] == pos) then + table.insert(s.path, pos); + else + s.path = { pos }; + end; + end; + if (#s.path == #s.cpath) then + s.solved = true; + way("На север"):disable(); + way("На юг"):disable(); + way("На восток"):disable(); + way("На запад"):disable(); + way("Выйти из храма"):enable(); + way("Пройти дальше"):enable(); + else + if (s.px == 1) then + way("На запад"):disable(); + else + way("На запад"):enable(); + end; + if (s.px == 3) then + way("На восток"):disable(); + else + way("На восток"):enable(); + end; + + if (s.py == 1) then + way("На юг"):disable(); + else + way("На юг"):enable(); + end; + if (s.py == 3) then + way("На север"):disable(); + else + way("На север"):enable(); + end; + end; + end; + entered = function(s) + s:check(); + if (not s.was_seen) then + s.was_seen = true; + pr [[ + Как только вы входите в храм, дверь за вами закрывается. Вы оказываетесь в запертой комнате. Пол и потолок комнаты покрыты светящимися водорослями, позволяя вам без проблем видеть все находящееся внутри. + ]]; + end; + end; + way = { + kh_vroom("На север", function(s) + ctt_dyp_temple_l1.py = ctt_dyp_temple_l1.py + 1; + ctt_dyp_temple_l1:check(); + return false; + end); + kh_vroom("На восток", function(s) + ctt_dyp_temple_l1.px = ctt_dyp_temple_l1.px - 1; + ctt_dyp_temple_l1:check(); + return false; + end); + kh_vroom("На запад", function(s) + ctt_dyp_temple_l1.px = ctt_dyp_temple_l1.px + 1; + ctt_dyp_temple_l1:check(); + return false; + end); + kh_vroom("На юг", function(s) + ctt_dyp_temple_l1.py = ctt_dyp_temple_l1.py - 1; + ctt_dyp_temple_l1:check(); + return false; + end); + kh_vroom("Выйти из храма", "ctt_dyp_temple_entrance"):disable(); + kh_vroom("Пройти дальше", "ctt_dyp_temple_l2"):disable(); + }; +}; + +ctt_dyp_button_const = function(nam, index) + obj { + nam = nam; + dsc = function(s) + if (ctt_dyp_temple_l2.pressed_buttons[index]) then + return "{Рычаг №"..tostring(index).."} включен."; + else + return "{Рычаг №"..tostring(index).."} выключен."; + end; + end; + act = function(s) + return [[ + Вы переключаете рычаг и узор на полу комнаты меняется + ]]; + end; + }; +end; + +ctt_dyp_temple_l2 = room { + var = { + active_parts = {false, false, false, false, false, false, false, false, false, false, false, false}; + pressed_buttons = {false, false, false, false, false, false, false, false}; + }; + buttons = { + {1, 5, 9, 11, 12}; + {1,2,3,4}; + {4, 8, 10, 11, 12}; + {2, 4, 5, 6}; + {1, 5, 7, 9, 10, 11, 12}; + {2, 6, 9, 10, 12}; + {1, 3, 7, 8}; + {3, 7, 9, 10, 11}; + }; + nam = "Храм Дипатреанотра, второй этаж"; + dsc = [[ + Большой круглый плохо освещенный зал. В центре зала расположено восемь рычагов, рядом с которыми нанесены какие-то символы. + ]]; + obj = { + ctt_dyp_button_const("ctt_dyp_b1", 1); + ctt_dyp_button_const("ctt_dyp_b2", 2); + ctt_dyp_button_const("ctt_dyp_b3", 3); + ctt_dyp_button_const("ctt_dyp_b4", 4); + ctt_dyp_button_const("ctt_dyp_b5", 5); + ctt_dyp_button_const("ctt_dyp_b6", 6); + ctt_dyp_button_const("ctt_dyp_b7", 7); + ctt_dyp_button_const("ctt_dyp_b8", 8); + }; +}; + +