diff --git a/game_over.lua b/game_over.lua --- a/game_over.lua +++ b/game_over.lua @@ -2,6 +2,10 @@ game_over_za_temple = game_over("game_ov Развернув субмарину вы подставили винт под удары ваших противников. Несколько попаданий в винт выводят его из строя и Левиафан оказывается обездвижен. Теперь вы совершенно беззащитны перед атаками противника. ]]); +game_over_kraken = game_over("game_over_kraken", [[ + От сильных ударов корпус субмарины начал расходиться по швам. В помещения хлынула вода. Озверевший кракен продолжает хлестать Левиафан своими щупальцами. Наконец, чудовище хватает подлодку и отправляется вместе с ней в бездну. К этому времени на борту уже не осталось никого живого, кроме, быть может, навьяров. +]]); + game_over_za_fight = game_over("game_over_za_fight", [[ Стражники навьяров - опасные противники. Очередной удар копья проделывает дыру в вашем скафандре и он наполняется водой. Вскоре вы задыхаетесь. ]]); diff --git a/items.lua b/items.lua --- a/items.lua +++ b/items.lua @@ -681,7 +681,7 @@ item_deep_key = obj { }; item_navjiarr_chart_z = obj { -nam = "item_navjiarr_chart_z"; + nam = "item_navjiarr_chart_z"; disp = "Навьярская табличка"; dsc = [[ На пьедестале лежит небольшая металлическая {табличка}. @@ -695,4 +695,15 @@ nam = "item_navjiarr_chart_z"; inv = [[ Металлическая табличка, на которую нанесены странные обозначения. ]]; +}; + +item_naethvjirr_key = obj { + nam = "item_naethvjirr_key"; + disp = "Ключ из древнего храма"; + dsc = [[ + На пьедестале лежит небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. + ]]; + inv = [[ + Небольшая прозрачная {коробочка}, внутрь которой заключена прямоугольная пластинка из неизвестного материала. Пластинка с обеих сторон покрыта тонкими металлическими нитями. + ]]; }; \ No newline at end of file diff --git a/journey_temple.lua b/journey_temple.lua --- a/journey_temple.lua +++ b/journey_temple.lua @@ -0,0 +1,1409 @@ +dt_labyrinth_foot = room { + nam = "dt_labyrinth_foot"; + no_exit = [[ + Нет смысла покидать Левиафан здесь. + ]]; + handwheel_room = "dt_labyrinth"; +}; + +dt_labyrinth_bridge = room { + nam = "dt_labyrinth_bridge"; + no_exit = [[ + Вы не сможете высадиться здесь. + ]]; + handwheel_room = "dt_labyrinth"; +}; + +--id, dsc, directions, where, leviathan_where +dt_labyrinth_map = { + ["01"] = { + dsc = [[ + Вы находитесь у входа в сложный лабиринт ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "02", + where = dt_labyrinth_foot + }; + ["02"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + sw = "01", + e = "03", + where = dt_labyrinth_foot + }; + ["03"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + w = "02", + ne = "04", + where = dt_labyrinth_foot + }; + ["04"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + sw = "03", + nw = "05", + e = "07", + where = dt_labyrinth_foot + }; + ["05"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + se = "04", + n = "06", + where = dt_labyrinth_foot + }; + ["06"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + s = "05", + where = dt_labyrinth_foot + }; + ["07"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + w = "04", + n = "08", + se = "09", + where = dt_labyrinth_foot + }; + ["08"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + s = "07", + where = dt_labyrinth_foot + }; + ["09"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + w = "33", + ne = "10", + nw = "07", + where = dt_labyrinth_foot + }; + ["10"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "11", + sw = "09", + where = dt_labyrinth_foot + }; + ["11"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "13", + se = "14", + nw = "12", + sw = "10", + where = dt_labyrinth_foot + }; + ["12"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Под вами простирается глубокая расщелина. Она продолжается на северо-запад настолько далеко, насколько хватает мощности прожектора Левиафана, однако, судя по карте, вам нет смысла двигаться в том направлении. + ]], + se = "11", + where = dt_labyrinth_foot + }; + ["13"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + sw = "11", + where = dt_labyrinth_foot + }; + ["14"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. На юго-востоке вы видите узкий каменный мостик, протянувшийся над бездной. Из отверстия в скале напротив моста исходит яркий свет. + ]], + nw = "11", + se = "15", + where = dt_labyrinth_foot + }; + ["15"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. Прямо под Левиафаном вы видите узкий каменный мостик, из отверстия в скале напротив которого исходит яркий свет. Мостик слишком узкий и вы не можете высадиться здесь + ]], + nw = "11", + se = "15", + where = dt_labyrinth_bridge + }; + ["16"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "35", + where = dt_labyrinth_foot + }; + ["17"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Под вами с северо-запада на юго-восток простирается глубокая расщелина. На северо-западе вы видите узкий каменный мостик, протянувшийся над бездной. Из отверстия в скале напротив моста исходит яркий свет. + ]], + nw = "15", + where = dt_labyrinth_foot + }; + ["18"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "31", + where = dt_labyrinth_foot + }; + ["19"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. на северо-востоке вы видите глубокую расщелину, простирающуюся с северо-запада на юго-восток. над расщелиной висит узкий каменный мостик. Из отверстия в скале напротив него исходит яркий свет. + ]], + ne = "15", + w = "20", + where = "dt_temple_ravine" + }; + ["20"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + e = "19", + s = "20", + where = dt_labyrinth_foot + }; + ["21"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + n = "20", + se = "22", + where = dt_labyrinth_foot + }; + ["22"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + nw = "21", + sw = "23", + where = dt_labyrinth_foot + }; + ["23"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "22", + w = "24", + where = dt_labyrinth_foot + }; + ["24"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + e = "23", + sw = "25", + where = dt_labyrinth_foot + }; + ["25"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "24", + nw = "26", + where = dt_labyrinth_foot + }; + ["26"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "27", + se = "25", + where = dt_labyrinth_foot + }; + ["27"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "28", + sw = "26", + nw = "30", + where = dt_labyrinth_foot + }; + ["28"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + sw = "27", + nw = "29", + where = dt_labyrinth_foot + }; + ["29"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + se = "28", + where = dt_labyrinth_foot + }; + ["30"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + se = "27", + w = "31", + where = dt_labyrinth_foot + }; + ["31"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + e = "30", + n = "32", + w = "34", + where = dt_labyrinth_foot + }; + ["32"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + ne = "33", + s = "31", + where = dt_labyrinth_foot + }; + ["33"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + e = "9", + s = "31", + where = dt_labyrinth_foot + }; + ["34"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + e = "31", + w = "35", + where = dt_labyrinth_foot + }; + ["35"] = { + dsc = [[ + Вы находитесь в лабиринте ущелий и впадин. Где-то здесь скрыт древний навьярский храм. + ]], + e = "34", + sw = "16", + where = dt_labyrinth_foot + }; +}; + +dt_labyrinth = room { + var { + location = "01"; + }; + no_exit = [[ + Нет смысла покидать Левиафан здесь. + ]]; + nam = "Штурвал Левиафана"; + dsc = function(s) + return dt_labyrinth_map[dt_labyrinth.location].dsc; + end; + entered = function(s) + s:update(); + end; + update = function(s) + dt_north:disable(); + dt_north_east:disable(); + dt_east:disable(); + dt_south_east:disable(); + dt_south:disable(); + dt_south_west:disable(); + dt_west:disable(); + dt_north_west:disable(); + if (dt_labyrinth_map[dt_labyrinth.location].n) then + dt_north:enable(); + end; + if (dt_labyrinth_map[dt_labyrinth.location].ne) then + dt_north_east:enable(); + end; + if (dt_labyrinth_map[dt_labyrinth.location].e) then + dt_east:enable(); + end; + if (dt_labyrinth_map[dt_labyrinth.location].se) then + dt_south_east:enable(); + end; + if (dt_labyrinth_map[dt_labyrinth.location].s) then + dt_south:enable(); + end; + if (dt_labyrinth_map[dt_labyrinth.location].sw) then + dt_south_west:enable(); + end; + if (dt_labyrinth_map[dt_labyrinth.location].w) then + dt_west:enable(); + end; + if (dt_labyrinth_map[dt_labyrinth.location].nw) then + dt_north_west:enable(); + end; + end; + way = { + kh_vroom("Отойти от штурвала", "leviathan_wheelhouse"); + }; + obj = { + "dt_north", + "dt_north_east", + "dt_east", + "dt_south_east", + "dt_south", + "dt_south_west", + "dt_west", + "dt_north_west" + }; +}; + +dt_north = obj { + nam = "dt_north"; + dsc = "{На север}^"; + act = function(s) + pr [[ + Вы движетесь на север. + ]]; + dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].n; + dt_labyrinth:update(); + end; +}; + +dt_north_east = obj { + nam = "dt_north_east"; + dsc = "{На северо-восток}^"; + act = function(s) + pr [[ + Вы движетесь на северо-восток. + ]]; + dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].ne; + dt_labyrinth:update(); + end; +}; + +dt_east = obj { + nam = "dt_east"; + dsc = "{На восток}^"; + act = function(s) + pr [[ + Вы движетесь на восток. + ]]; + dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].e; + dt_labyrinth:update(); + end; +}; + +dt_south_east = obj { + nam = "dt_south_east"; + dsc = "{На юго-восток}^"; + act = function(s) + pr [[ + Вы движетесь на юго-восток. + ]]; + dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].se; + dt_labyrinth:update(); + end; +}; + +dt_south = obj { + nam = "dt_south"; + dsc = "{На юг}^"; + act = function(s) + pr [[ + Вы движетесь на юг. + ]]; + dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].s; + dt_labyrinth:update(); + end; +}; + +dt_south_west = obj { + nam = "dt_south_west"; + dsc = "{На юго-запад}^"; + act = function(s) + pr [[ + Вы движетесь на юго-запад. + ]]; + dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].sw; + dt_labyrinth:update(); + end; +}; + +dt_west = obj { + nam = "dt_west"; + dsc = "{На запад}^"; + act = function(s) + pr [[ + Вы движетесь на запад. + ]]; + dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].w; + dt_labyrinth:update(); + end; +}; + +dt_north_west = obj { + nam = "dt_north_west"; + dsc = "{На северо-запад}^"; + act = function(s) + pr [[ + Вы движетесь на северо-запад. + ]]; + dt_labyrinth.location = dt_labyrinth_map[dt_labyrinth.location].nw; + dt_labyrinth:update(); + end; +}; + +dt_temple_ravine = room { + nam = "dt_temple_ravine"; + handwheel_room = "dt_labyrinth"; + disp = "Ущелье"; + dsc = [[ + Вы стоите на дне расщелины. К северо-востоку от вас находится глубокое ущелье. Через ущелье переброшен узкий каменный мостик, на другом конце которого вы видите в скале прямоугольное отверстие явно искусственного происхождения. Из отверстия исходит яркий свет. + ]]; + way = { + kh_vroom("В Левиафан", "leviathan_airlock"); + kh_vroom("На мост", "dt_temple_bridge1"); + }; +}; + +dt_temple_bridge1 = room { + var { + state = 0; + }; + nam = "dt_temple_bridge1"; + disp = "Мост над пропастью"; + dsc = [[ + Вы ступаете на хлипкий мостик. Камни ходят ходуном под вашими ногами, и кажется, что слабая конструкция вот вот рухнет, увлекая вас за собой в бездну. + ]]; + entered = function(s) + char_radcliffe:accompany(false); + char_wright:accompany(false); + char_anna:accompany(false); + if (s.state == 0) then + s.state = 1; + if (char_learr.follow) then + pr [[ + Леарр с сомнением смотрит на шаткую постройку и по ее головным плавникам бегут цветные полосы: "Не думаю, что мост выдержит нас обоих. Не бойся, я поплыву над ним". + ]]; + end; + if (char_phaetlarr.follow) then + pr [[ + Фаэтларр осматривает мост и по его головным плавникам бегут цветные полосы: "Я бы не рискнул пойти по нему, но у тебя, хевьяр, кажется нет выбора", - навьяр смотрит на вас со странной ухмылкой. + ]]; + end; + if (char_radcliffe.follow) then + pr [[ + В динамиках раздается голос Уолтера Рэдклиффа: "Я не думаю, что мост выдержит нас обоих. Если тебе нужен помощник, то навьяр здесь будет полезнее. К тому же, это их святилище". + ]]; + end; + if (char_wright.follow) then + pr [[ + В динамиках раздается голос Джека Райта: "Нам точно стоит идти здесь? Мост не выглядит надежным. Думаю, тебе стоит взять навьяра, если тебе нужен спутник". + ]]; + end; + if (char_anna.follow) then + pr [[ + В динамиках раздается голос Анны Рэдклифф: "Думаю, мост без проблем выдержит одного из нас. Удачи. Мне кажется, тебе лучше было бы идти с навьяром". + ]]; + end; + end; + end; + way = { + kh_vroom("В ущелье", "dt_temple_ravine"); + kh_vroom("Дальше по мосту", "dt_temple_bridge2"); + }; +}; + +dt_temple_bridge2 = room { + var { + state = 0; + }; + nam = "dt_temple_bridge2"; + disp = "Мост над пропастью"; + dsc = [[ + Вы почти дошли до проема в скале. Вам кажется, что внизу, в бездне движется что-то огромное. + ]]; + entered = function(s) + if (s.state == 0) then + s.state = 1; + if (char_learr.follow) then + pr [[ + По головным плавникам Леарр бегут цветные полосы: "Что это? Там, внизу". + ]]; + end; + if (char_phaetlarr.follow) then + pr [[ + По головным плавникам Фаэтларра бегут цветные полосы: "Ты видишь это, хевьяр?". + ]]; + end; + end; + end; + way = { + kh_vroom("К ущелью", "dt_temple_bridge1"); + kh_vroom("В проем", "dt_temple_entrance"); + }; +}; + +dt_temple_entrance = room { + var { + state = 0; + open = false; + }; + nam = "dt_temple_entrance"; + disp = "У входа в храм"; + dsc = function(s) + if (dt_temple_entrance.open) then + return [[ + Вы находитесь в небольшом помещении, ярко освещенном лампами в виде длинных трубок. Стены вокруг покрыты навьярскими письменами. Дверь во внутреннее помещение храма открыта. + ]]; + else + return [[ + Вы находитесь в небольшом помещении, ярко освещенном лампами в виде длинных трубок. Стены вокруг покрыты навьярскими письменами. Тяжелая дверь во внутреннее помещение храма заблокирована. + ]]; + end; + end; + entered = function(s) + if (s.state == 0) then + s.state = 1; + if (char_learr.follow) then + pr [[ + Леарр с интересом рассматривает древние письмена. По ее головным плавникам бегут цветные полосы: "Потрясающе! Это слова наших предков. Тех, кто видел Лсэрианотр собственными глазами, а может даже и самих создателей Спящего в Глубинах!". + ]]; + end; + if (char_phaetlarr.follow) then + pr [[ + Фаэтларр бегло осматривает письмена: "Кажется, Блэк кое-что упустил. Хорошо, что мы здесь хевьяр. С этими знаниями мы победим". + ]]; + end; + end; + end; + obj = { + "dt_terminal", + "dt_wires" + + }; + way = { + kh_vroom("К ущелью", "dt_temple_bridge2"); + kh_vroom("В храм", function(s) + if (dt_temple_entrance.open) then + return "dt_temple"; + else + pr [[Дверь заперта. ]]; + return false; + end; + end); + }; +}; + +dt_terminal = obj { + nam = "dt_terminal"; + dsc = [[ + Рядом с дверью расположен небольшой {пульт} с шестью кнопками и светящимся экраном. + ]]; + act = function(s) + walkin("dt_terminal_room"); + end; +}; + +dt_wires = obj { + nam = "dt_wires"; + dsc = [[ + Под пультом вы видите открытую {панель} с какими-то проводами. + ]]; + act = function(s) + walkin("dt_wires_room"); + end; +}; + +dt_terminal_room = room { + var { + code = {}; + }; + nam = "dt_terminal_room"; + disp = "У входа в храм, пульт"; + forcedsc = true; + dsc = function(s) + local r = ""; + if (#s.code == 0) then + r = "Вы стоите перед небольшим пультом. На экране пусто. "; + else + r = "Вы стоите перед небольшим пультом. На экране вы видите следующую последовательность цветов: "; + for i = 1, #s.code - 1 do + r = r .. dt_wire_colors[s.code[i]] .. ", "; + end; + r = r .. dt_wire_colors[s.code[#s.code]] .. ". "; + end; + r = r .. "Под экраном расположены шесть кнопок. " + return r; + end; + way = { + kh_vroom("Отойти от терминала", "dt_temple_entrance"); + }; + obj = { + "dt_term1", + "dt_term2", + "dt_term3", + "dt_term4", + "dt_term5", + "dt_term6" + }; + check = function(s) + if (#s.code == 4) then + local test = true; + for i = 1, #s.code do + test = test and (s.code[i] == dt_code[i]); + end; + s.code = {}; + if (test) then + dt_temple_entrance.open = true; + pr [[ Через несколько мгновений дисплей гаснет. Дверь открывается почти бесшумно, открывая вам доступ к внутреннему залу древнего святилища. ]]; + else + pr [[ Через несколько мгновений дисплей гаснет. ]]; + end; + end; + end; +}; + +dt_term1 = obj { + nam = "dt_term1"; + dsc = "{Нажать фиолетовую кнопку}^"; + act = function(s) + if (ArrayUtils.indexOf(dt_buttons, 1) ~= 0 or not dt_wires_room.connections[1]) then + return "Вы нажимаете на кнопку, но ничего не происходит. "; + else + table.insert(dt_terminal_room.code, dt_wires_room.connections[1]); + dt_terminal_room:check(); + pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. "; + end; + end; +}; + +dt_term2 = obj { + nam = "dt_term2"; + dsc = "{Нажать синюю кнопку}^"; + act = function(s) + if (ArrayUtils.indexOf(dt_buttons, 2) ~= 0 or not dt_wires_room.connections[2]) then + return "Вы нажимаете на кнопку, но ничего не происходит. "; + else + table.insert(dt_terminal_room.code, dt_wires_room.connections[2]); + dt_terminal_room:check(); + pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. "; + end; + end; +}; + +dt_term3 = obj { + nam = "dt_term3"; + dsc = "{Нажать зеленую кнопку}^"; + act = function(s) + if (ArrayUtils.indexOf(dt_buttons, 3) ~= 0 or not dt_wires_room.connections[3]) then + return "Вы нажимаете на кнопку, но ничего не происходит. "; + else + table.insert(dt_terminal_room.code, dt_wires_room.connections[3]); + dt_terminal_room:check(); + pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. "; + end; + end; +}; + +dt_term4 = obj { + nam = "dt_term4"; + dsc = "{Нажать желтую кнопку}^"; + act = function(s) + if (ArrayUtils.indexOf(dt_buttons, 4) ~= 0 or not dt_wires_room.connections[4]) then + return "Вы нажимаете на кнопку, но ничего не происходит. "; + else + table.insert(dt_terminal_room.code, dt_wires_room.connections[4]); + dt_terminal_room:check(); + pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. "; + end; + end; +}; + +dt_term5 = obj { + nam = "dt_term5"; + dsc = "{Нажать оранжевую кнопку}^"; + act = function(s) + if (ArrayUtils.indexOf(dt_buttons, 5) ~= 0 or not dt_wires_room.connections[5]) then + return "Вы нажимаете на кнопку, но ничего не происходит. "; + else + table.insert(dt_terminal_room.code, dt_wires_room.connections[5]); + dt_terminal_room:check(); + pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. "; + end; + end; +}; + +dt_term6 = obj { + nam = "dt_term6"; + dsc = "{Нажать красную кнопку}^"; + act = function(s) + if (ArrayUtils.indexOf(dt_buttons, 6) ~= 0 or not dt_wires_room.connections[6]) then + return "Вы нажимаете на кнопку, но ничего не происходит. "; + else + table.insert(dt_terminal_room.code, dt_wires_room.connections[6]); + dt_terminal_room:check(); + pr "Вы нажимаете на кнопку, и на экране зажигается соответствующая ей цветная полоса. "; + end; + end; +}; + +dt_wire_colors = { + "фиолетовый", + "синий", + "зеленый", + "желтый", + "оранжевый", + "красный" +}; + +dt_wires_room = dlg { + var { + connections = { + 1, + 2, + 3, + 4, + 5, + 6 + }; + selected = nil; + }; + nam = "dt_wires_room"; + disp = "У входа в храм, панель"; + dsc = [[ + Перед вами открытая панель, за которой находятся шесть проводов, подключенные к своим разъемам. Провода отличаются цветами. + ]]; + choose_socket = function(s) + pon("s0"); + pon("s1"); + pon("s2"); + pon("s3"); + pon("s4"); + pon("s5"); + for conn = 1, #dt_wires_room.connections do + if (dt_wires_room.connections[conn] == 1) then + poff("s0"); + elseif (dt_wires_room.connections[conn] == 2) then + poff("s1"); + elseif (dt_wires_room.connections[conn] == 3) then + poff("s2"); + elseif (dt_wires_room.connections[conn] == 4) then + poff("s3"); + elseif (dt_wires_room.connections[conn] == 5) then + poff("s4"); + elseif (dt_wires_room.connections[conn] == 6) then + poff("s5"); + end; + end; + psub("socket"); + end; + phr = { + {tag="wire"}; + { + tag = "w0", always = true, + function(s) + local connect = "не подключен"; + if (dt_wires_room.connections[1] ~= nil) then + connect = dt_wire_colors[dt_wires_room.connections[1]] .. " разъем"; + return "Отсоединить фиолетовый провод (".. connect .. ")"; + else + return "Выбрать фиолетовый провод (".. connect .. ")"; + end; + + end, function(s) + if (dt_wires_room.connections[1] ~= nil) then + dt_wires_room.connections[1] = nil; + return "Вы отсоединяете провод"; + else + dt_wires_room.selected = 1; + dt_wires_room:choose_socket(); + return "Куда подключить?"; + end; + end + }; + { + tag = "w1", always = true, + function(s) + local connect = "не подключен"; + if (dt_wires_room.connections[2] ~= nil) then + connect = dt_wire_colors[dt_wires_room.connections[2]] .. " разъем"; + return "Отсоединить синий провод (".. connect .. ")"; + else + return "Выбрать синий провод (".. connect .. ")"; + end; + + end, function(s) + if (dt_wires_room.connections[2] ~= nil) then + dt_wires_room.connections[2] = nil; + return "Вы отсоединяете провод"; + else + dt_wires_room.selected = 2; + dt_wires_room:choose_socket(); + return "Куда подключить?"; + end; + end + }; + { + tag = "w2", always = true, + function(s) + local connect = "не подключен"; + if (dt_wires_room.connections[3] ~= nil) then + connect = dt_wire_colors[dt_wires_room.connections[3]] .. " разъем"; + return "Отсоединить зеленый провод (".. connect .. ")"; + else + return "Выбрать зеленый провод (".. connect .. ")"; + end; + + end, function(s) + if (dt_wires_room.connections[3] ~= nil) then + dt_wires_room.connections[3] = nil; + return "Вы отсоединяете провод"; + else + dt_wires_room.selected = 3; + dt_wires_room:choose_socket(); + return "Куда подключить?"; + end; + end + }; + { + tag = "w3", always = true, + function(s) + local connect = "не подключен"; + if (dt_wires_room.connections[4] ~= nil) then + connect = dt_wire_colors[dt_wires_room.connections[4]] .. " разъем"; + return "Отсоединить желтый провод (".. connect .. ")"; + else + return "Выбрать желтый провод (".. connect .. ")"; + end; + + end, function(s) + if (dt_wires_room.connections[4] ~= nil) then + dt_wires_room.connections[4] = nil; + return "Вы отсоединяете провод"; + else + dt_wires_room.selected = 4; + dt_wires_room:choose_socket(); + return "Куда подключить?"; + end; + end + }; + { + tag = "w4", always = true, + function(s) + local connect = "не подключен"; + if (dt_wires_room.connections[5] ~= nil) then + connect = dt_wire_colors[dt_wires_room.connections[5]] .. " разъем"; + return "Отсоединить оранжевый провод (".. connect .. ")"; + else + return "Выбрать оранжевый провод (".. connect .. ")"; + end; + + end, function(s) + if (dt_wires_room.connections[5] ~= nil) then + dt_wires_room.connections[5] = nil; + return "Вы отсоединяете провод"; + else + dt_wires_room.selected = 5; + dt_wires_room:choose_socket(); + return "Куда подключить?"; + end; + end + }; + { + tag = "w5", always = true, + function(s) + local connect = "не подключен"; + if (dt_wires_room.connections[6] ~= nil) then + connect = dt_wire_colors[dt_wires_room.connections[6]] .. " разъем"; + return "Отсоединить красный провод (".. connect .. ")"; + else + return "Выбрать красный провод (".. connect .. ")"; + end; + + end, function(s) + if (dt_wires_room.connections[6] ~= nil) then + dt_wires_room.connections[6] = nil; + return "Вы отсоединяете провод"; + else + dt_wires_room.selected = 6; + dt_wires_room:choose_socket(); + return "Куда подключить?"; + end; + end + }; + { + tag = "leave", always = true, "Отойти от панели", code = [[ walk("dt_temple_entrance"); ]] + }; + {tag="socket"}; + { + tag = "s0", always = true, + "В фиолетовый разъем", function(s) + dt_wires_room.connections[dt_wires_room.selected] = 1; + psub("wire"); + return "Провод подключен"; + end + }; + { + tag = "s1", always = true, + "В синий разъем", function(s) + dt_wires_room.connections[dt_wires_room.selected] = 2; + psub("wire"); + return "Провод подключен"; + end + }; + { + tag = "s2", always = true, + "В зеленый разъем", function(s) + dt_wires_room.connections[dt_wires_room.selected] = 3; + psub("wire"); + return "Провод подключен"; + end + }; + { + tag = "s3", always = true, + "В желтый разъем", function(s) + dt_wires_room.connections[dt_wires_room.selected] = 4; + psub("wire"); + return "Провод подключен"; + end + }; + { + tag = "s4", always = true, + "В оранжевый разъем", function(s) + dt_wires_room.connections[dt_wires_room.selected] = 5; + psub("wire"); + return "Провод подключен"; + end + }; + { + tag = "s5", always = true, + "В красный разъем", function(s) + dt_wires_room.connections[dt_wires_room.selected] = 6; + psub("wire"); + return "Провод подключен"; + end + }; + }; +}; + +dt_wire0 = obj { + nam = "dt_wire0"; + dsc = function(s) + local connect = "не подключен"; + if (dt_wires_room.connections[1] ~= nil) then + connect = dt_wire_colors[dt_wires_room.connections[1]] .. "разъем"; + end; + return "Выбрать фиолетовый провод (".. connect .. ")^"; + end; +}; + +dt_temple = room { + var { + state = 0; + }; + nam = "dt_temple"; + disp = "Древний храм"; + dsc = [[ + Вы находитесь в огромном зале, высеченном в скале древними навьярами. + ]]; + obj = { + "dt_walls", + "dt_pedestal", + "dt_screens", + "item_naethvjirr_key" + }; + way = { + kh_vroom("Выйти", "dt_temple_entrance"); + }; +}; + +dt_walls = obj { + nam = "dt_walls"; + dsc = [[ + Стены зала, освещенные такими же лампами, как и внешнее помещение, украшены множеством предостерегающих рисунков и символов. + ]]; +}; + +dt_pedestal = obj { + nam = "dt_pedestal"; + dsc = [[ + В центре зала установлен массивный металлический пьедестал. + ]]; +}; + +dt_screens = obj { + nam = "dt_screens"; + dsc = [[ + Вокруг пьедестала расположено множество экранов, на которых цветными полосами навьярского языка горят предупреждения об опасности использования предмета, хранящегося в этом зале. + ]]; +} + +dt_fight = room { + var { + state = 0; + has_shot = false; + rotation = 90; + dir = 0; + tentacles = { + {hp=200, dir=0, away = 0 }; + {hp=200, dir=1, away = 0 }; + {hp=200, dir=2, away = 0 }; + {hp=200, dir=3, away = 0 }; + {hp=200, dir=4, away = 0 }; + }; + }; + nam = "dt_fight"; + disp = "Левиафан, рубка"; + forcedsc = true; + entered = function(s) + s:maketurn(); + if (s.state == 0) then + s.state = 1; + local dirs = {0,1,2,3,4,5,6,7}; + for i = 1, #s.tentacles do + local cd = rnd(#dirs); + s.tentacles[i].dir = dirs[cd]; + table.remove(dirs, cd); + print(#dirs); + end; + end; + end; + eval_tentacle = function(s, tentacle) + if (tentacle.hp <= 70) then + return [[Серьезно раненое щупальце ]]; + elseif (tentacle.hp <= 140) then + return [[Раненое щупальце ]]; + elseif (tentacle.hp < 200) then + return [[Легко раненое щупальце ]]; + else + return [[Щупальце ]]; + end; + end; + dsc = function(s) + local fr = s.dir + 1; + local r = s.dir + 2; + local br = s.dir + 3; + local b = s.dir + 4; + local fl = s.dir - 1; + local l = s.dir - 2; + local bl = s.dir - 3; + if (fr > 7) then + fr = fr - 8; + end; + if (r > 7) then + r = r - 8; + end; + if (br > 7) then + br = br - 8; + end; + if (b > 7) then + b = b - 8; + end; + if (fl < 0) then + fl = fl + 8; + end; + if (l < 0) then + l = l + 8; + end; + if (bl < 0) then + bl = bl + 8; + end; + for i = 1, #s.tentacles do + pr(s.tentacles[i].hp .. " "); + end; + pr("^"); + pr [[Щупальца кракена тянутся к Левиафану. ]]; + for i = 1, #s.tentacles do + if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == s.dir and s.tentacles[i].away == 0) then + pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится прямо перед субмариной. ]]); + end; + end; + for i = 1, #s.tentacles do + if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == fr and s.tentacles[i].away == 0) then + pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится спереди и справа от субмарины. ]]); + end; + end; + for i = 1, #s.tentacles do + if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == fl and s.tentacles[i].away == 0) then + pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится спереди и слева от субмарины. ]]); + end; + end; + for i = 1, #s.tentacles do + if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == r and s.tentacles[i].away == 0) then + pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится справа по борту. ]]); + end; + end; + for i = 1, #s.tentacles do + if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == l and s.tentacles[i].away == 0) then + pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится слева по борту. ]]); + end; + end; + for i = 1, #s.tentacles do + if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == b and s.tentacles[i].away == 0) then + pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится сзади. ]]); + end; + end; + for i = 1, #s.tentacles do + if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == bl and s.tentacles[i].away == 0) then + pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится сзади и слева. ]]); + end; + end; + for i = 1, #s.tentacles do + if (s.tentacles[i].hp > 0 and s.tentacles[i].dir == br and s.tentacles[i].away == 0) then + pr(s:eval_tentacle(s.tentacles[i]) .. [[ находится сзади и справа. ]]); + end; + end; + end; + maketurn = function(s) + local dcnt = 0; + if (s.has_shot) then + local fr = s.dir + 1; + local r = s.dir + 2; + local br = s.dir + 3; + local b = s.dir + 4; + local fl = s.dir - 1; + local l = s.dir - 2; + local bl = s.dir - 3; + if (fr > 7) then + fr = fr - 8; + end; + if (r > 7) then + r = r - 8; + end; + if (br > 7) then + br = br - 8; + end; + if (b > 7) then + b = b - 8; + end; + if (fl < 0) then + fl = fl + 8; + end; + if (l < 0) then + l = l + 8; + end; + if (bl < 0) then + bl = bl + 8; + end; + s.has_shot = false; + s.rotation = 90; + for i = 1, #s.tentacles do + if (s.tentacles[i].hp > 0) then + if (s.tentacles[i].away > 0) then + s.tentacles[i].away = s.tentacles[i].away - 1; + if (s.tentacles[i].away == 0) then + --TODO show up somewhere + local dirs = {}; + for j = 1, #s.tentacles do + if (s.tentacles[j].hp > 0 and s.tentacles[j].away == 0) then + table.insert(dirs, s.tentacles[j].dir); + end; + end; + local newdir; + repeat + newdir = rnd(8) - 1; + until ArrayUtils.indexOf(dirs, newdir) == 0; + print(newdir); + s.tentacles[i].dir = newdir; + + if (s.tentacles[i].hp <= 70) then + pr [[Серьезно раненое щупальце ]]; + elseif (s.tentacles[i].hp <= 140) then + pr [[Раненое щупальце ]]; + elseif (s.tentacles[i].hp < 200) then + pr [[Легко раненое щупальце ]]; + end; + if (newdir == f) then + pr [[подтягивается спереди. ]]; + elseif (newdir == fr) then + pr [[подтягивается спереди справа. ]]; + elseif (newdir == fl) then + pr [[подтягивается спереди слева. ]]; + elseif (newdir == r) then + pr [[подтягивается справа. ]]; + elseif (newdir == l) then + pr [[подтягивается слева. ]]; + elseif (newdir == br) then + pr [[подтягивается сзади справа. ]]; + elseif (newdir == bl) then + pr [[подтягивается сзади слева. ]]; + elseif (newdir == b) then + pr [[подтягивается сзади. ]]; + end; + end; + else + --TODO hit leviathan or hide up + if (rnd(8) > 1) then + submarine_leviathan.hull_integrity = submarine_leviathan.hull_integrity - 5; + pr [[Кракен ударяет Левиафан щупальцем. ]]; + else + s.tentacles[i].away = 1; + pr [[Кракен отдергивает одно из щупалец. ]]; + end; + end; + else + dcnt = dcnt + 1; + end; + end; + end; + if (dcnt > 2) then + walk("dt_kraken_victory"); + end; + + dt_f_rotate_ccw45:enable(); + dt_f_rotate_cw45:enable(); + dt_f_sonic:enable(); + if (submarine_leviathan.torpedoes == 0) then + dt_f_torpedo:disable(); + else + dt_f_torpedo:enable(); + end; + if (submarine_leviathan.torpedoes == 2) then + dt_f_recharge:disable(); + else + dt_f_recharge:enable(); + end; + if (s.rotation < 45) then + dt_f_rotate_ccw45:disable(); + dt_f_rotate_cw45:disable(); + end; + if (s.has_shot) then + dt_f_torpedo:disable(); + dt_f_sonic:disable(); + end; + + if (submarine_leviathan.hull_integrity <= 0) then + walk("game_over_kraken"); + end; + end; + obj = { + "dt_f_rotate_ccw45", + "dt_f_rotate_cw45", + "dt_f_torpedo", + "dt_f_sonic", + "dt_f_recharge", + "dt_f_wait" + }; +}; + +dt_f_rotate_ccw45 = obj { + nam = "dt_f_rotate_ccw45"; + dsc = "{Повернуть на 45 градусов против часовой стрелки}^"; + act = function(s) + dt_fight.dir = dt_fight.dir - 1; + if (dt_fight.dir < 0) then + dt_fight.dir = dt_fight.dir + 8; + end; + dt_fight.rotation = dt_fight.rotation - 45; + pr "Субмарина поворачивает против часовой стрелки. "; + dt_fight:maketurn(); + end; +}; + +dt_f_rotate_cw45 = obj { + nam = "dt_f_rotate_cw45"; + dsc = "{Повернуть на 45 градусов по часовой стрелке}^"; + act = function(s) + dt_fight.dir = dt_fight.dir + 1; + if (dt_fight.dir > 7) then + dt_fight.dir = dt_fight.dir - 8; + end; + dt_fight.rotation = dt_fight.rotation - 45; + pr "Субмарина поворачивает по часовой стрелке. "; + dt_fight:maketurn(); + end; +}; + +dt_f_torpedo = obj { + nam = "dt_f_torpedo"; + dsc = "{Выстрелить торпедой}^"; + act = function(s) + pr "Вы выпускаете торпеду. "; + dt_fight.has_shot = true; + submarine_leviathan.torpedoes = submarine_leviathan.torpedoes - 1; + for i=1, #dt_fight.tentacles do + if dt_fight.tentacles[i].dir == dt_fight.dir and dt_fight.tentacles[i].hp > 0 and dt_fight.tentacles[i].away == 0 then + dt_fight.tentacles[i].hp = dt_fight.tentacles[i].hp - 70; + dt_fight.tentacles[i].away = 2; + if (dt_fight.tentacles[i].hp > 0) then + pr "Торпеда попадает в одно из щупалец, нанеся ему существенный урон. Кракен резко отдергивает его. "; + else + pr "Щупальце отрывает взрывом. Кракен бьется в конвульсиях. "; + end; + end; + end; + dt_fight:maketurn(); + end; +}; + +dt_f_sonic = obj { + nam = "dt_f_sonic"; + dsc = "{Выстрелить из звуковой пушки}^"; + act = function(s) + dt_fight.has_shot = true; + pr [[Вы стреляете из звуковой пушки. ]]; + local fr = dt_fight.dir + 1; + local fl = dt_fight.dir - 1; + if (fr > 7) then + fr = fr - 8; + end; + if (fl < 0) then + fl = fl + 8; + end; + local hit = false; + for i=1, #dt_fight.tentacles do + if (dt_fight.tentacles[i].dir == dt_fight.dir or dt_fight.tentacles[i].dir == fr or dt_fight.tentacles[i].dir == fl) and dt_fight.tentacles[i].hp > 0 and dt_fight.tentacles[i].away == 0 then + hit = true; + dt_fight.tentacles[i].hp = dt_fight.tentacles[i].hp - 20; + dt_fight.tentacles[i].away = 3; + if (dt_fight.tentacles[i].hp <= 0) then + pr "Одно из щупалец выведено из строя. "; + end; + end; + end; + if (hit) then + pr [[ + Кракен резко отдергивает щупальца, попавшие в область действия звуковой пушки. + ]]; + end; + dt_fight:maketurn(); + end; +}; + +dt_f_recharge = obj { + nam = "dt_f_recharge"; + dsc = "{Перезарядить торпедные аппараты}^"; + act = function(s) + submarine_leviathan.torpedoes = 2; + if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0 or ArrayUtils.indexOf(pl.party, 'radcliffe') ~= 0) then + pr "Вы отдаете по телефону приказ перезарядить торпедные аппараты. "; + dt_fight:maketurn(); + else + pr "Вы спускаетесь вниз, чтобы перезарядить торпедные аппараты. "; + dt_fight.has_shot = true; + dt_fight:maketurn(); + dt_fight.has_shot = true; + dt_fight:maketurn(); + pr "Вы возвращаетесь в рубку, чтобы продолжить бой. " + end; + end; +}; + + +dt_f_wait = obj { + nam = "dt_f_wait"; + dsc = "{Ждать}^"; + act = function(s) + pr ""; + dt_fight.has_shot = true; + dt_fight.rotation = 0; + dt_fight:maketurn(); + end; +}; + +dt_kraken_victory = cutscene("dt_kraken_victory", "Левиафан, рубка", [[ + После очередного выстрела Левиафана, кракен исчезает в глубинах, оставив вас в покое. +]], "leviathan_wheelhouse"); \ No newline at end of file diff --git a/journey_zayslanotrr.lua b/journey_zayslanotrr.lua --- a/journey_zayslanotrr.lua +++ b/journey_zayslanotrr.lua @@ -1,3 +1,7 @@ +global { + za_convoy_gone = false; +}; + za_gate_foot = room { nam = "Вход в Заисланотр"; handwheel_room = "za_gate"; @@ -141,7 +145,7 @@ za_convoy = { end; if (za_convoy.index > #za_convoy_route) then --TODO Конвой ушол - print("Konvoy left"); + za_convoy_gone = true; timer:stop(); game.timer = null; lifeoff(za_convoy); @@ -935,13 +939,48 @@ za_street_32 = za_street { za_cross_18 = za_cross { nam = "za_cross_18"; dsc = [[ - Вы находитесь посреди перекрестка рядом с тюрьмой Заисланотра. Рядом с собой в стене здания вы видите небольшой зарешеченное окошко. + Вы находитесь посреди перекрестка рядом с тюрьмой Заисланотра. ]]; way = { kh_vroom("На юг", "za_deadend_6"); kh_vroom("На запад", "za_street_33"); kh_vroom("На восток", "za_street_32"); }; + obj = { + "za_prison_window"; + }; +}; + +za_prison_window = obj { + var { + state = 0; + }; + nam = "za_prison_window"; + dsc = [[ + Рядом с собой в стене здания вы видите небольшой зарешеченное {окошко}. + ]]; + act = function(s) + if (s.state == 0) then + if (za_convoy_gone) then + return [[ + В камере по ту сторону окна находится тот самый навьяр, которого вы видели в сопровождении конвоя. + ]]; + else + return [[ + Здесь нет ничего интересного. + ]]; + end; + else + return [[ + Вам здесь больше нечего делать. + ]]; + end; + end; + used = function (s, o) + if (o == item_toolbox) then + walk("za_phaetlarr_free"); + end; + end; }; za_deadend_6 = za_deadend { @@ -1803,4 +1842,28 @@ za_char_phaetlarr = npc { za_phaetlarr_final = cutscene("za_phaetlarr_final", "Левиафан, Кают-компания", [[ Вы возвращаетесь на Левиафан, где уже собрался весь экипаж. Фаэтларр рассказывает вам как попасть в храм -]], "leviathan_wardroom"); \ No newline at end of file +]], "leviathan_wardroom"); + +za_phaetlarr_free = cutscene("za_phaetlarr_free", "Заисланотр, улица", function(s) + if (char_learr.follow) then + return [[ + При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" Глядя на Леарр он немного успокаивается и внимательно следит за ее словами: "Они что-хотели?" + ]]; + elseif (char_anna.follow) then + return [[ + При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Анны: "Он явно не расположен к нам. Но у нас мало выбора. Спроси его, знает ли он где храм"? + ]]; + elseif (char_wright.follow) then + return [[ + При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Джека: "Я думаю, пора возвращаться на корабль. Я надеюсь, он даст нам всю необходимую информацию". + ]]; + elseif (char_radcliffe.follow) then + return [[ + При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" В динамиках раздается голос Уолтера: "Здесь слишком опасно оставаться. Надо доставить его на Левиафан и там решить, что делать дальше". + ]]; + else + return [[ + При помощи инструментов, вы убираете решетку из окна и освобождаете Фаэтларра. Навьяр выбирается из тюрьмы и с недоверием смотрит на вас, сжимая копье. Вы видите, как цветные полосы на его плавниках формируются в вопрос: "Что вы здесь хотите?" + ]]; + end; +end, za_phaetlarr_dlg); \ No newline at end of file diff --git a/main.lua b/main.lua --- a/main.lua +++ b/main.lua @@ -67,8 +67,13 @@ global { rel_learr = 0; rel_anna = 0; rel_jack = 0; + + dt_code = {}; + dt_buttons = {}; }; + + pl = player { nam = "player"; disp = "Дэвид Дрейк"; @@ -145,6 +150,19 @@ function init() leviathan_init(); warehouse18_init(); warehouse32_init(); + + local nums = {1,2,3,4,5,6}; + for i = 1, 4 do + local index = rnd(#nums); + table.insert(dt_code, nums[index]); + table.remove(nums, index); + end; + nums = {1,2,3,4,5,6}; + for i = 1, 3 do + local index = rnd(#nums); + table.insert(dt_buttons, nums[index]); + table.remove(nums, index); + end; ---game init pl.where = intro; ---debug @@ -221,7 +239,7 @@ function init() put(item_colt, pl); --ven_shark.position = "55"; --pl.where = "za_plaetlarr_fight"; - pl.where = "za_temple_back_entrance"; + pl.where = "dt_fight"; move(submarine_leviathan, "za_temple_back_entrance_foot"); char_anna.follow = true; --pl.where = "ven_chest_look";