diff --git a/atlantis_ignis_on_fire.lua b/atlantis_ignis_on_fire.lua --- a/atlantis_ignis_on_fire.lua +++ b/atlantis_ignis_on_fire.lua @@ -49,4 +49,999 @@ atlantis_learr_first_dlg = dlg { Плавники Леарр снова окрашиваются сине-зененым: _"Прекрасно-будет. Вы его-и-наши-древние-знания-найдете. Я вам-как-смогу-помогу. Я идти-должна"_. Леарр уходит, а вы остаетесь одни в коридоре. ]], code [[ walk("atlantis_oculus_main_corridor"); ]]}; }; +}; + +char_wright_iof = obj { + nam = "Джек Райт"; + dsc = function(s) + if (atl_iof_time_state.pl_safe) then + if (atl_iof_time_state.carry_learr) then + return [[ + Джек Райт облачен в скафандр и ждет ваших указаний. Леарр бессильно лежит на его руках. + ]]; + else + return [[ + Джек Райт облачен в скафандр и ждет ваших указаний. + ]]; + end; + else + if (atl_iof_time_state.life_left > 3) then + return [[ + Джек Райт ждет ваших указаний. + ]]; + else + return [[ + Джек Райт с трудом стоит на ногах. + ]]; + end; + end; + end; + life = function(s) + if (where(s) ~= where(pl) and where(pl).iof) then + move(s, where(pl)); + end; + end; + act = function(s) + return [[ + Некогда разговаривать. + ]]; + end; +}; + +char_learr_faint = obj { + nam = "Леарр"; + inv = [[ + На руках вы держите Леарр. Она дышит очень слабо. Вам нужно поторопиться, если вы не хотите, чтобы она умерла. + ]]; + life = function(s) + if (rnd(12) > 11) then + pr("Вы чувствуете слабое дыхание Леарр"); + end; + end; +}; + +char_learr_iof = obj { + var { + faint = false; + }; + nam = "Леарр"; + dsc = function(s) + if (s.faint) then + return [[ + {Леарр} лежит на полу без сознания. + ]]; + end; + if (atl_iof_time_state.learr_safe) then + return [[ + Леарр облачена в скафандр и ждет ваших указаний. + ]]; + else + if (atl_iof_time_state.life_left > 3) then + return [[ + Леарр ждет ваших указаний. + ]]; + else + return [[ + Леарр с трудом стоит на ногах. + ]]; + end; + end; + end; + life = function(s) + + if (where(s) ~= where(pl) and where(pl).iof) then + move(s, where(pl)); + end; + end; + act = function(s) + if (where(s) == atl_iof_ignis_service_room) then + walkin('dlg_learr_suit'); + elseif (s.faint) then + walkin('atl_iof_learr_faint_alone'); + else + return [[ + Некогда разговаривать. + ]]; + end; + end; +}; + +dlg_learr_suit = dlg { + nam = "Леарр"; + disp = "Леарр"; + entered = [[ + Леарр вопросительно смотрит на вас + ]]; + phr = { + {"Я хочу, чтобы ты одела скафандр", [[ + Леарр недоуменно смотрит на вас: "Зачем он мне? Сама-я в-воде-дышу. Мне не-нужны ваши-приспособления". + ]], code [[ + psub('tag1'); + ]]}; + {"Мы сейчас оденем скафандры. Продолжай следовать за нами", [[ + Леарр кивает: "Я недолго-продержусь. Я что-смогу-сделаю". + ]], code [[ + back(); + ]]}; + {tag="tag1"}; + {"Не спорь, полезай внутрь", [[ + Леарр недовольно скалит зубы: "Хевьяр не-указывай-мне". + ]], code [[ + psub('tag2'); + ]]}; + {"Ладно, обойдемся без этого, просто следуй за нами", [[ + Леарр кивает: "Я недолго-продержусь. Я что-смогу-сделаю". + ]], code [[ + back(); + ]]}; + {tag="tag2"}; + {"Не хочешь не надо. Просто следуй за нами", [[ + Леарр молча кивает. + ]], code [[ + back(); + ]]}; + {"Эта штука защитит тебя от жара. И тебе будет легче дышать, пока мы не выбрались", [[ + Леарр кивает: "Хорошо. Я вам-доверяю". Вы помогаете ей забраться в скафандр и одеваете шлем. + ]], code [[ + atl_iof_time_state.learr_safe = true; + back(); + ]]}; + }; +}; + +dlg_learr_iof = dlg { + nam = "Леарр"; + disp = "Леарр"; + entered = [[ + Леарр подбегает к вам и спрашивает: "Что происходит?" + ]]; + phr = { + {'Надеюсь, все в порядке, следуй за мной', [[ + Леарр кивает: "Хорошо". + ]], code [[ + lifeon('char_learr_iof'); + char_learr_iof.state = 1; + walk('atl_iof_ignis_hall_a'); + ]]}; + {'Такое уже происходило?', [[ + Леарр пожимает плечами: "Я не-видела". + ]]}; + }; +}; + +atl_iof_intro = room { + nam = "Атлантида, Игнис, зал А"; + disp = "Атлантида, Игнис, зал А"; + dsc = [[ + Внезапно свет в зале гаснет и вы оказываетесь в полной темноте. Вскоре вы начинаете ощущать запах дыма, проникающего из вентиляционных отверстий. Леарр кажется очень удивленной. В темноте вы видите слабое свечение цветных полос, бегущих по ее головным плавникам: _"**Что происходит?**"_. + ]]; + obj = { + vobj('Продолжить','{Продолжить}', 'dlg_learr_iof'); + }; +}; + +atl_iof_ignis_hall_a = room { + var { + ready = false; + }; + nam = "Атлантида, Игнис, зал А"; + disp = "Атлантида, Игнис, зал А"; + dsc = [[ + Средних размеров прямоугольный зал. Из вентиляционных отверстий выплывают тонкие струйки дыма. + ]]; + entered = function(s) + if (not s.ready) then + s.ready = true; + lifeon('char_learr_iof'); + if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then + atl_iof_time_state.wright_here = true; + if (where(char_jack_wright_atlantis) == atlantis_ignis_hall_a) then + lifeon('char_wright_iof'); + end; + else + atl_iof_time_state.wright_here = false; + end; + + end; + end; + obj = { + 'char_learr_iof' + }; +}; + +atl_iof_blocked_by_fire = function() + pr("Огонь преграждает вам путь"); + return false; +end; + +atl_iof_blocked_by_rubble = function() + pr("Обломки преграждают вам путь"); + return false; +end; + +atl_iof_time_state = obj { + nam = 'atl_iof_time_state'; + var { + life_left = 6; + pl_safe = false; + learr_safe = false; + wright_here = false; + carry_learr = false; + }; + life = function(s) + if (not where(pl).iof) then + return; + end; + s.life_left = s.life_left - 1; + if (s.life_left == 5) then + if (not s.pl_safe) then + pr("Вы чувствуете жар"); + end; + elseif (s.life_left == 4) then + if (s.wright_here and not s.pl_safe and where(char_wright_iof) == where(pl)) then + pr("Джек утирает пот со лба"); + end; + elseif (s.life_left == 3) then + if (not s.learr_safe) then + pr("Леарр тяжело дышит"); + end; + elseif (s.life_left == 2) then + if (not s.pl_safe) then + pr("Вам трудно дышать, жар становится нестерпимым"); + end; + elseif (s.life_left == 1) then + if (s.wright_here and not s.pl_safe and where(char_wright_iof) == where(pl)) then + pr("Джек с трудом следует за вами"); + end; + elseif (s.life_left == 0) then + if (not s.learr_safe) then + pr("Леарр едва передвигает ногами"); + end; + else + lifeoff(s); + lifeoff(char_learr_iof); + if (not s.pl_safe) then + walkin("game_over_ignis"); + elseif (s.wright_here) then + walkin("atl_iof_learr_faint_wright"); + else + walkin("atl_iof_learr_faint_alone"); + end; + end; + end; +}; + +atl_iof_learr_faint_alone = dlg { + nam = "Леарр"; + disp = "Леарр"; + dsc = [[ + Леарр медленно опускается на пол. Сквозь скафандр вы с трудом различаете ее голос: "Я не-могу-дальше-идти". + ]]; + phr = { + {"Совсем немного осталось, пойдем. [Помочь Леарр подняться]", [[ + Леарр пытается подняться опираясь на вашу руку, но снова падает. Она без сознания. + ]], code [[ + tag('faint'); + ]]}; + {"Оставайся здесь, я вернусь. ", [[ + Леарр теряет сознание, обессилев. + ]], code [[ + char_learr_iof.faint = true; + back(); + ]]}; + {"Оставайся здесь. ", [[ + Леарр теряет сознание, обессилев. + ]], code [[ + char_learr_iof.faint = true; + back(); + ]]}; + {"[Взять Леарр на руки]", [[ + Леарр теряет сознание, обессилев. Леарр весит не больше обычного человека. Вы берете ее на руки и продолжаете движение. + ]], code [[ + remove(char_learr_iof, where(char_learr_iof)); + put(char_learr_faint, pl); + lifeon(char_learr_faint); + atl_iof_time_state.carry_learr = true; + back(); + ]]}; + {tag='faint'}; + {"[Взять Леарр на руки]", [[ + Леарр весит не больше обычного человека. Вы берете ее на руки и продолжаете движение. + ]], code [[ + remove(char_learr_iof, where(char_learr_iof)); + put(char_learr_faint, pl); + lifeon(char_learr_faint); + atl_iof_time_state.carry_learr = true; + back(); + ]]}; + {"[Уйти]", "", code [[ back(); ]]}; + }; +}; + +atl_iof_learr_faint_wright = dlg { + nam = "Леарр"; + disp = "Леарр"; + dsc = [[ + Леарр медленно опускается на пол. Сквозь скафандр вы с трудом различаете ее голос: "Я не-могу-дальше-идти". Райт подходит к ней и пытается помочь ей подняться. + ]]; + phr = { + {"Все в порядке?", [[ + По радио вы слышите голос Райта: "Да, я помогу ей. Идем". Джек аккуратно берет Леарр на руки и идет к вам. + ]], code [[ + remove(char_learr_iof, where(char_learr_iof)); + atl_iof_time_state.carry_learr = true; + back(); + ]]}; + }; +}; + +atl_iof_wright_dlg = dlg { + nam = "Джек Райт"; + disp = "Джек Райт"; + entered = [[ + Едва вы оказываетесь в главном зале, к вам подбегает Джек Райт: _"У вас все в порядке? Здесь все рушится. Здесь недалеко должно быть служебное помещение со скафандрами. Нам следует добраться до туда"_. + ]]; + phr = { + {"А лифт?", [[ + Джек отрицательно качает головой: _"Я не смог добраться до него"_. + ]]}; + {"Ты знаешь куда идти?", [[ + Джек неуверенно пожал плечами: _"Насколько я помню, совсем рядом если идти по часовой стрелке вдоль стены зала"_. + ]], code [[ + psub('next'); + ]]}; + {tag = "next"}; + {"Следуй за нами", [[ + Джек молча кивает. + ]], code [[ + lifeon('char_wright_iof'); + back(); + ]]}; + }; +}; + +atl_iof_main_n3 = room { + var { + ready = false; + }; + nam = "Атлантида, Игнис, главный зал, вход в зал А"; + disp = "Атлантида, Игнис, главный зал, вход в зал А"; + iof = true; + dsc = [[ + Огромный круглый зал охвачен пожаром. Освещение не работает. Клубы черного дыма заволакивают помещение, затрудняя ваши перемещения. Вы находитесь в северной части зала у самого его края. + ]]; + entered = function(s) + if (not s.ready) then + s.ready = true; + if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then + if (where(char_wright_iof) ~= s) then + walkin("atl_iof_wright_dlg"); + end; + end; + end; + end; + way = { + kh_vroom("Против часовой", "atl_iof_main_nw3"); + kh_vroom("По часовой", atl_iof_blocked_by_fire); + kh_vroom("К центру", "atl_iof_main_n2"); + kh_vroom("В зал А", "atl_iof_ignis_hall_a"); + }; +}; + +atl_iof_main_n2 = room { + nam = "Атлантида, Игнис, главный зал, север"; + disp = "Атлантида, Игнис, главный зал, север"; + iof = true; + way = { + kh_vroom("Против часовой", atl_iof_blocked_by_fire); + kh_vroom("По часовой", "atl_iof_main_ne2"); + kh_vroom("К центру", atl_iof_blocked_by_rubble); + kh_vroom("К краю", "atl_iof_main_n3"); + }; +}; + +atl_iof_main_n1 = room { + nam = "Атлантида, Игнис, главный зал, север, у лифта"; + disp = "Атлантида, Игнис, главный зал, север, у лифта"; + iof = true; + way = { + kh_vroom("Против часовой", "atl_iof_main_nw1"); + kh_vroom("По часовой", "atl_iof_main_ne1"); + kh_vroom("В Лифт", function() + pr("Лифт не работает"); + return false; + end); + kh_vroom("К краю", atl_iof_blocked_by_rubble); + }; +}; + +atl_iof_main_ne3 = room { + nam = "Атлантида, Игнис, главный зал, вход в служебное помещение"; + disp = "Атлантида, Игнис, главный зал, вход в служебное помещение"; + iof = true; + way = { + kh_vroom("Против часовой", atl_iof_blocked_by_fire); + kh_vroom("По часовой", "atl_iof_main_se3"); + kh_vroom("К центру", "atl_iof_main_nw2"); + kh_vroom("В служебное помещение", "atl_iof_ignis_service_room"); + }; +}; + +atl_iof_main_ne2 = room { + nam = "Атлантида, Игнис, главный зал, северозапад"; + disp = "Атлантида, Игнис, главный зал, северозапад"; + iof = true; + way = { + kh_vroom("Против часовой", "atl_iof_main_n2"); + kh_vroom("По часовой", atl_iof_blocked_by_fire); + kh_vroom("К центру", atl_iof_blocked_by_rubble); + kh_vroom("К краю", "atl_iof_main_ne3"); + }; +}; + +atl_iof_main_ne1 = room { + nam = "Атлантида, Игнис, главный зал, северозапад, у лифта"; + disp = "Атлантида, Игнис, главный зал, северозапад, у лифта"; + iof = true; + way = { + kh_vroom("Против часовой", "atl_iof_main_n1"); + kh_vroom("По часовой", "atl_iof_main_se1"); + kh_vroom("К краю", atl_iof_blocked_by_rubble); + }; +}; + +atl_iof_main_se3 = room { + nam = "Атлантида, Игнис, главный зал, вход в зал B"; + disp = "Атлантида, Игнис, главный зал, вход в зал B"; + iof = true; + way = { + kh_vroom("Против часовой", "atl_iof_main_ne3"); + kh_vroom("По часовой", atl_iof_blocked_by_rubble); + kh_vroom("К центру", atl_iof_blocked_by_fire); + kh_vroom("В зал B", function() + pr("Дверь заклинило"); + return false; + end); + }; +}; + +atl_iof_main_se2 = room { + nam = "Атлантида, Игнис, главный зал, юговосточная часть"; + disp = "Атлантида, Игнис, главный зал, юговосточная часть"; + iof = true; + way = { + kh_vroom("Против часовой", atl_iof_blocked_by_fire); + kh_vroom("По часовой", atl_iof_blocked_by_fire); + kh_vroom("К центру", "atl_iof_main_se1"); + kh_vroom("К краю", atl_iof_blocked_by_fire); + }; +}; + +atl_iof_main_se1 = room { + nam = "Атлантида, Игнис, главный зал, юговосточная часть, у лифта"; + disp = "Атлантида, Игнис, главный зал, юговосточная часть, у лифта"; + iof = true; + way = { + kh_vroom("Против часовой", "atl_iof_main_ne1"); + kh_vroom("По часовой", "atl_iof_main_s1"); + kh_vroom("К краю", "atl_iof_main_se2"); + }; +}; + +atl_iof_main_s3 = room { + nam = "Атлантида, Игнис, главный зал, экстренный выход"; + disp = "Атлантида, Игнис, главный зал, экстренный выход"; + iof = true; + way = { + kh_vroom("Против часовой", atl_iof_blocked_by_rubble); + kh_vroom("По часовой", atl_iof_blocked_by_rubble); + kh_vroom("К центру", "atl_iof_main_s2"); + kh_vroom("Выход", "atl_iof_outside"); + }; +}; + +atl_iof_main_s2 = room { + nam = "Атлантида, Игнис, главный зал, южная часть"; + disp = "Атлантида, Игнис, главный зал, южная часть"; + iof = true; + way = { + kh_vroom("Против часовой", atl_iof_blocked_by_fire); + kh_vroom("По часовой", atl_iof_blocked_by_rubble); + kh_vroom("К центру", "atl_iof_main_s1"); + kh_vroom("К краю", "atl_iof_main_s3"); + }; +}; + +atl_iof_main_s1 = room { + nam = "Атлантида, Игнис, главный зал, южная часть, у лифта"; + disp = "Атлантида, Игнис, главный зал, южная часть, у лифта"; + iof = true; + way = { + kh_vroom("Против часовой", "atl_iof_main_se1"); + kh_vroom("По часовой", atl_iof_blocked_by_rubble); + kh_vroom("К краю", "atl_iof_main_s2"); + }; +}; + +atl_iof_main_sw3 = room { + nam = "Атлантида, Игнис, главный зал, вход в зал C"; + disp = "Атлантида, Игнис, главный зал, вход в зал C"; + iof = true; + way = { + kh_vroom("Против часовой", atl_iof_blocked_by_rubble); + kh_vroom("По часовой", "atl_iof_main_nw3"); + kh_vroom("К центру", atl_iof_blocked_by_fire); + kh_vroom("В зал C", function() + pr("Дверь заклинило"); + return false; + end); + }; +}; + +atl_iof_main_sw2 = room { + nam = "Атлантида, Игнис, главный зал, югозападная часть"; + disp = "Атлантида, Игнис, главный зал, югозападная часть"; + iof = true; + way = { + kh_vroom("Против часовой", atl_iof_blocked_by_rubble); + kh_vroom("По часовой", "atl_iof_main_nw2"); + kh_vroom("К центру", "atl_iof_main_sw1"); + kh_vroom("К краю", atl_iof_blocked_by_fire); + }; +}; + +atl_iof_main_sw1 = room { + nam = "Атлантида, Игнис, главный зал, югозападная часть, у лифта"; + disp = "Атлантида, Игнис, главный зал, югозападная часть, у лифта"; + iof = true; + way = { + kh_vroom("Против часовой", atl_iof_blocked_by_fire); + kh_vroom("По часовой", "atl_iof_main_nw1"); + kh_vroom("К краю", "atl_iof_main_sw2"); + }; +}; + +atl_iof_main_nw3 = room { + nam = "Атлантида, Игнис, главный зал, северозапад, внешний край"; + disp = "Атлантида, Игнис, главный зал, северозапад, внешний край"; + iof = true; + way = { + kh_vroom("Против часовой", "atl_iof_main_n3"); + kh_vroom("По часовой", "atl_iof_main_sw3"); + kh_vroom("К центру", "atl_iof_main_nw2"); + }; +}; + +atl_iof_main_nw2 = room { + nam = "Атлантида, Игнис, главный зал, северозапад"; + disp = "Атлантида, Игнис, главный зал, северозапад"; + iof = true; + way = { + kh_vroom("Против часовой", "atl_iof_main_sw2"); + kh_vroom("По часовой", atl_iof_blocked_by_fire); + kh_vroom("К центру", atl_iof_blocked_by_rubble); + kh_vroom("К краю", "atl_iof_main_nw3"); + }; +}; + +atl_iof_main_nw1 = room { + nam = "Атлантида, Игнис, главный зал, северозапад, у лифта"; + disp = "Атлантида, Игнис, главный зал, северозапад, у лифта"; + iof = true; + way = { + kh_vroom("Против часовой", "atl_iof_main_sw1"); + kh_vroom("По часовой", "atl_iof_main_n1"); + kh_vroom("К краю", atl_iof_blocked_by_rubble); + }; +}; + +atl_iof_suits = obj { + nam = "Скафандры"; + dsc = "Вдоль стен помещения расставлено несколько {скафандров}"; + act = function(s) + atl_iof_time_state.pl_safe = true; + walkin("atl_iof_external_radio_dlg"); + end; +}; + +atl_iof_external_radio_dlg = dlg { + nam = "Атлантида, Игнис, служебное помещение"; + entered = function(s) + if (where(char_wright_iof) == where(pl)) then + return [[ + Забравшись в скафандр, вы с Райтом начинаете настраивать радио, чтобы иметь возможность общаться друг с другом. В процессе настройки вы натыкаетесь на основную частоту станции и слышите голос Моро: "... вытащить их с Игниса. Что мы можем сделать?" + Даркстар отвечет ему: "Мы подойдем на Наутилусе к экстренному выходу и попробуем проникнуть внутрь". + ]]; + else + return [[ + Забравшись в скафандр, вы начинаете настраивать радио, чтобы сообщить остальным о случившемся. Вскоре вы натыкаетесь на основную частоту станции и слышите голос Моро: "... вытащить их с Игниса. Что мы можем сделать?" + Даркстар отвечет ему: "Мы подойдем на Наутилусе к экстренному выходу и попробуем проникнуть внутрь". + ]]; + end; + end; + phr = { + {"Вы слышите меня?", [[ + Голоса в динамике прерываются. Через короткое время вы слышите встревоженный голос Моро: "Моро на связи! Дрейк, вы там все в порядке?" + ]], code [[psub('is_ok')]]}; + {tag = "is_ok"}; + {"Да, все здесь. Мы одеваем скафандры", [[ + Вы слышите голос Майкла Райта: "Отлично. Они защитят вас от жара и у вас будет достаточно воздуха. Лифт мы заблокировали, поэтому чтобы выбраться, воспользуйтесь экстренным шлюзом в южной части Игниса. Наутилус подхватит вас там". + ]], code [[psub('clear')]]}; + {"Да, все здесь. Как нам выбраться?", [[ + Вы слышите голос Майкла Райта: "Лифт мы заблокировали, поэтому чтобы выбраться, воспользуйтесь экстренным шлюзом в южной части Игниса. Оденьте скафандры - они защитят вас. Наутилус подхватит вас у выхода". + ]], code [[psub('clear')]]}; + {tag = "clear"}; + {"Вас понял, конец связи[Выключить радио].", code [[back();]]}; + }; +}; + +atl_iof_ignis_service_room = room { + nam = "Атлантида, Игнис, служебное помещение"; + disp = "Атлантида, Игнис, служебное помещение"; + way = { + kh_vroom("В главный зал", function(s) + if (atl_iof_time_state.pl_safe) then + return "atl_iof_main_ne3"; + else + pr("Я не вернусь туда без снаряжения"); + return false; + end; + end); + }; +}; + +atl_iof_outside = room { + nam = "Атлантида, Игнис"; + iof = true; + dsc = function(s) + if (have(char_learr_faint)) then + if (atl_iof_time_state.wright_here) then + return [[ + Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Как только вы задраиваете внутренний люк, Райт опускает Леарр на пол и начинает помогать вам отдраивать внешний люк. ^ + Отсек быстро заполняет вода. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы берете Леарр на руки и выходите наружу. Тяжелый скафандр тянет вас вниз и вы плавно опускаетесь на верхнюю обшивку Наутилуса. К вам тут же подходят несколько человек, облаченных в такие же скафандры. Они забирают Леарр у вас и приглашают вас войти внутрь Наутилуса. + ]]; + else + return [[ + Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Вы кладете Леарр на пол и снова задраиваете внутренний люк. Тяжело вздохнув, вы начинаете открывать внешний люк. ^ + Отсек быстро заполняет вода. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы берете Леарр на руки и выходите наружу. Тяжелый скафандр тянет вас вниз и вы плавно опускаетесь на верхнюю обшивку Наутилуса. К вам тут же подходят несколько человек, облаченных в такие же скафандры. Они забирают Леарр у вас и приглашают вас войти внутрь Наутилуса. + ]]; + end; + else + return [[ + Вы добираетесь до аварийного шлюза Игниса. Вы с трудом отдраиваете его и заходите в шлюзовую камеру. Задраив дверь изнутри, вы начинаете открывать внешний люк. ^ + Отсек быстро заполняет вода и вы замечаете некоторую растерянность Леарр. Снаружи вы видите Наутилус, находящийся прямо под люком. Вы спрыгиваете вниз. Леарр следует за вами. К вам тут же подходят несколько человек, облаченных в такие же скафандры и приглашают вас войти внутрь Наутилуса. + ]]; + end; + end; + obj = { + vobj("Продолжить", "{Продолжить}", "atl_iof_part2_dlg"); + }; +}; + +atl_iof_part2_dlg = dlg { + nam = "Атлантида, Игнис"; + entered = [[ + Вы слышите голос, доносящийся из радио: "Все в порядке. Наутилус доставит вас на станцию". + ]]; + phr = { + {"Хорошо[Войти в шлюз Наутилуса].", [[ + Вы забираетесь внутрь Наутилуса - эта субмарина заметно меньше вашего Левиафана, но также вмещает довольно большой экипаж. Вы снимаете скафандры и проходите в кают-компанию. По радио вы слышите голос Моро: "Как только вы придете в себя после произошедшего, я жду вас в моем кабинете". ^ + Через считанные минуты вы оказываетесь в доке. Как во сне вы добираетесь до своей каюты, где без сил засыпаете. + ]], code [[ walk('atlantis_luna_drake_room'); ]]}; + {"Я могу чем-то помочь?", [[ + По радио вы слышите голос Райта: "Было бы очень здорово, если бы вы смогли отключить подачу кислорода в Игнис". + ]], code [[ psub('help'); ]]}; + {tag="help"}; + {"Хорошо, я готов", [[ + Райт продолжает: "Спускайтесь вниз - на крышу Доминуса и идите к лифту. Где-то с южной стороны должна быть панель управления. С ней вы, думаю, разберетесь". Вы аккуратно спрыгиваете с Наутилуса вниз и идете к лифту. + ]], code [[ walk('atl_iof_outside_lift'); ]]}; + {"Я передумал", [[ + Райт отвечает: "Хорошо, возвращайтесь на станцию. Мои люди все сделают". + ]], code [[ walk('atlantis_luna_drake_room'); ]]}; + }; +}; + +atl_iof_outside_lift = room { + nam = "Атлантида"; + dsc = [[ + Над вами нависает огромная полусфера Игниса, покоящаяся на множестве опор. Вы находитесь снаружи шахты лифта, одновременно служащей центральной опорой секции. Вы слышите скрежет металла наверху, подвергаемого сильному термальному воздействию. + ]]; + obj = { + "atl_iof_air_valves" + }; +}; + +atl_iof_air_valves = room { + var { + valves = { 0,0,0,0,0,0 }; + selected = 0; + }; + nam = "Кислородные клапаны"; + entered = function(s) + atl_iof_select1:enable(); + atl_iof_select2:enable(); + atl_iof_select3:enable(); + atl_iof_select4:enable(); + atl_iof_select5:enable(); + atl_iof_select6:enable(); + atl_iof_air_ccw:disable(); + atl_iof_air_cw:disable(); + atl_iof_air_cancel:disable(); + + atl_iof_air_valves.selected = 0; + end; + pic = function(s) + local image = 'images/air_bg.png'; + for i = 1, #s.valves do + image = image .. ";images/air_" .. tostring(s.valves[i]) .. ".png@" .. tostring(((i - 1) % 3) * 32) .. "," .. tostring(math.floor((i - 1) / 3) * 32); + end; + + return image; + end; + dsc = function(s) + if (s.selected == 0) then + return [[ + Перед собой вы видите 6 клапанов. Каждый из них пропускает через себя воздух только в одном направлении. По показаниям манометра вы видите, что воздух продолжает поступать в Игнис. + ]]; + else + return "Перед собой вы видите 6 клапанов. Каждый из них пропускает через себя воздух только в одном направлении. По показаниям манометра вы видите, что воздух продолжает поступать в Игнис. В какую сторону вы хотите повернуть выбранный клапан (" .. tostring(s.selected) .. ")?"; + end; + end; + obj = { + 'atl_iof_select1'; + 'atl_iof_select2'; + 'atl_iof_select3'; + 'atl_iof_select4'; + 'atl_iof_select5'; + 'atl_iof_select6'; + 'atl_iof_air_ccw'; + 'atl_iof_air_cw'; + 'atl_iof_air_cancel'; + }; + is_solved = function(s) + local current = 1; + local visited = {false, false, false, false, false, false}; + while not visited[current] do + visited[current] = true; + if (s.valves[current] == 0) then + if (current == 3 or current == 6) then + return false; + else + current = current + 1; + end; + elseif (s.valves[current] == 1) then + current = current + 3; + elseif (s.valves[current] == 2) then + current = current - 1; + elseif (s.valves[current] == 3) then + current = current - 3; + end; + end; + current = 4; + visited = {false, false, false, false, false, false}; + while not visited[current] do + visited[current] = true; + if (s.valves[current] == 0) then + if (current == 3 or current == 6) then + return false; + else + current = current + 1; + end; + elseif (s.valves[current] == 1) then + current = current + 3; + elseif (s.valves[current] == 2) then + current = current - 1; + elseif (s.valves[current] == 3) then + current = current - 3; + end; + end; + return true; + end; +}; + +atl_iof_select = function(index) + return obj { + nam = "Клапан " .. tostring(index); + dsc = "{Выбрать клапан " .. tostring(index) .. "}^"; + act = function(s) + atl_iof_select1:disable(); + atl_iof_select2:disable(); + atl_iof_select3:disable(); + atl_iof_select4:disable(); + atl_iof_select5:disable(); + atl_iof_select6:disable(); + atl_iof_air_ccw:enable(); + atl_iof_air_cw:enable(); + atl_iof_air_cancel:enable(); + atl_iof_air_valves.selected = index; + return "Вы беретесь за клапан " .. tostring(index); + end; + }; +end; + +atl_iof_select1 = atl_iof_select(1); +atl_iof_select2 = atl_iof_select(2); +atl_iof_select3 = atl_iof_select(3); +atl_iof_select4 = atl_iof_select(4); +atl_iof_select5 = atl_iof_select(5); +atl_iof_select6 = atl_iof_select(6); + +atl_iof_air_ccw = obj { + nam = "Повернуть против часовой стрелки"; + dsc = "{Повернуть против часовой стрелки}^"; + act = function(s) + atl_iof_select1:enable(); + atl_iof_select2:enable(); + atl_iof_select3:enable(); + atl_iof_select4:enable(); + atl_iof_select5:enable(); + atl_iof_select6:enable(); + atl_iof_air_ccw:disable(); + atl_iof_air_cw:disable(); + atl_iof_air_cancel:disable(); + + local t; + local r = ""; + if (atl_iof_air_valves.valves[atl_iof_air_valves.selected] > 0) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected] - 1; + else + t = 3; + end; + + if (atl_iof_air_valves.selected == 1) then + if (t == 3 or t == 2 or + (t == 0 and atl_iof_air_valves.valves[2] == 2) or + (t == 1 and atl_iof_air_valves.valves[4] == 3)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 2) then + if (t == 3 or + (t == 2 and atl_iof_air_valves.valves[1] == 0) or + (t == 0 and atl_iof_air_valves.valves[3] == 2) or + (t == 1 and atl_iof_air_valves.valves[5] == 3)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 3) then + if (t == 3 or + (t == 2 and atl_iof_air_valves.valves[2] == 0) or + (t == 1 and atl_iof_air_valves.valves[6] == 3)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 4) then + if (t == 1 or t == 2 or + (t == 3 and atl_iof_air_valves.valves[1] == 1) or + (t == 0 and atl_iof_air_valves.valves[5] == 2)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 5) then + if (t == 1 or + (t == 3 and atl_iof_air_valves.valves[2] == 1) or + (t == 2 and atl_iof_air_valves.valves[4] == 0) or + (t == 0 and atl_iof_air_valves.valves[6] == 2)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 6) then + if (t == 1 or + (t == 3 and atl_iof_air_valves.valves[3] == 1) or + (t == 2 and atl_iof_air_valves.valves[5] == 0)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + end; + + atl_iof_air_valves.valves[atl_iof_air_valves.selected] = t; + + atl_iof_air_valves.selected = 0; + + if (atl_iof_air_valves:is_solved()) then + walk("atl_iof_electr_dlg"); + end; + + return r; + end; +}; + +atl_iof_air_cw = obj { + nam = "Повернуть по часовой стрелке"; + dsc = "{Повернуть по часовой стрелке}^"; + act = function(s) + atl_iof_select1:enable(); + atl_iof_select2:enable(); + atl_iof_select3:enable(); + atl_iof_select4:enable(); + atl_iof_select5:enable(); + atl_iof_select6:enable(); + atl_iof_air_ccw:disable(); + atl_iof_air_cw:disable(); + atl_iof_air_cancel:disable(); + + local t; + local r = ""; + if (atl_iof_air_valves.valves[atl_iof_air_valves.selected] < 3) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected] + 1; + else + t = 0; + end; + + if (atl_iof_air_valves.selected == 1) then + if (t == 3 or t == 2 or + (t == 0 and atl_iof_air_valves.valves[2] == 2) or + (t == 1 and atl_iof_air_valves.valves[4] == 3)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 2) then + if (t == 3 or + (t == 2 and atl_iof_air_valves.valves[1] == 0) or + (t == 0 and atl_iof_air_valves.valves[3] == 2) or + (t == 1 and atl_iof_air_valves.valves[5] == 3)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 3) then + if (t == 3 or + (t == 2 and atl_iof_air_valves.valves[2] == 0) or + (t == 1 and atl_iof_air_valves.valves[6] == 3)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 4) then + if (t == 1 or t == 2 or + (t == 3 and atl_iof_air_valves.valves[1] == 1) or + (t == 0 and atl_iof_air_valves.valves[5] == 2)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 5) then + if (t == 1 or + (t == 3 and atl_iof_air_valves.valves[2] == 1) or + (t == 2 and atl_iof_air_valves.valves[4] == 0) or + (t == 0 and atl_iof_air_valves.valves[6] == 2)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + elseif (atl_iof_air_valves.selected == 6) then + if (t == 1 or + (t == 3 and atl_iof_air_valves.valves[3] == 1) or + (t == 2 and atl_iof_air_valves.valves[5] == 0)) then + t = atl_iof_air_valves.valves[atl_iof_air_valves.selected]; + r = "Клапан не поворачивается"; + end; + end; + + atl_iof_air_valves.valves[atl_iof_air_valves.selected] = t; + + atl_iof_air_valves.selected = 0; + + if (atl_iof_air_valves:is_solved()) then + walk("atl_iof_electr_dlg"); + end; + + return r; + end; +}; + +atl_iof_air_cancel = obj { + nam = "Выбрать другой клапан"; + dsc = "{Выбрать другой клапан}"; + act = function(s) + atl_iof_select1:enable(); + atl_iof_select2:enable(); + atl_iof_select3:enable(); + atl_iof_select4:enable(); + atl_iof_select5:enable(); + atl_iof_select6:enable(); + atl_iof_air_ccw:disable(); + atl_iof_air_cw:disable(); + atl_iof_air_cancel:disable(); + + atl_iof_air_valves.selected = 0; + + return ""; + end; }; \ No newline at end of file