atlantis_learr_intro = room { nam = "Атлантида, Окулус, Главный коридор"; dsc = [[Вы выходите из межсекционного коридора в главный коридор секции _"Окулус"_ и сталкиваетесь лицом к лицу с неведомым существом: ^стройное, покрытое блестящей серо-зеленой чешуей тело, рыбья голова с небольшими отростками-плавниками, тонкие ноги и руки с широкими перепонками между длинными пальцами. Ярко-оранжевые глаза существа с интересом разглядывают вас. Во рту существа сверкают острые треугольные зубы. Одето оно в белую рубашку и ярко-синюю юбку до колен. На шее существа вы замечаете жабры. Отростки на голове существа принимают слабо уловимый сине-зеленый оттенок. ]]; obj = { vway('continue', '{Продолжить}', 'atlantis_learr_first_dlg') }; }; atlantis_learr_first_dlg = dlg { nam = "Леарр"; entered = [[Существо начинает говорить: "Я зздессь-рраньшше-не-видела васс". Голос звучит непривычно для вашего слуха - гласные произносятся очень коротко, между некоторыми словами делаются резкие паузы, другие же сливаются практически в одно, шипящие и "р" произносятся удлиненно. ]]; phr = { {"Кто ты?", [[ Существо отвечает: "I'yhe'lea'yhe'na'vji'a'rr", -- вы отчетливо различаете короткие паузы между слогами. ]], code [[ pon('who_are_you'); ]]}; {tag="who_are_you", false, "Я не понимаю, что ты говоришь", [[Существо ненадолго застывает в замешательстве. Затем отвечает: "Я Lea'rr. Ты так-понимаешь?". ]], code [[psub('learr'); ]]}; {"Аааа, монстр, помогите!!!", [[Существо скалит зубы. Плавники меняют цвет на ярко-фиолетовый. Оно рычит на вас: "Прропусти. Нет-врремени". Щелкнув зубами, _"Чудовище"_ уходит. ]], code [[ put(char_learr_atlantis, atl_ignis_hall_a); char_learr_atlantis.offended = true; walk("atl_oculus_main_corridor"); ]]}; {tag="learr"}; {"Рад знакомству. Я Дэвид Дрейк. ", [[Леарр переспрашивает: "Ты ззнаешшь Уильяма-Дррейка?" -- Вам кажется, вы чувствуете удивление, хотя интонации в словах существа вам совершенно чужды. ]], code [[ psub('drake') ]]}; {"Откуда ты?", [[Леарр отвечает: "Я изз Iraa'pha'anot'rr. Я на-Атлантиде-жживу-ссейчасс".]]}; {tag="drake"}; {"Да, я его сын. Ты знакома с ним?", [[оттенок головных плавников Леарр становится более ярким и смещается ближе к зеленому. Она отвечает: _"Да, я его-ззнаю. Уильям-Дррейк нашшу-иссторрию-иззучал. Он ссейчасс-исскать-уехал Lse'ry'anot'rr. Я что-вы-зздессь рада"_. ]], code [[ psub('follow_drake') ]]}; {tag="follow_drake"}; {"Я здесь из-за него. " , [[Леарр кивает: _"Я вам-как-смогу-помогу. Я в-Игниссе-буду, ессли вы говоррить-хотите"_. Леарр уходит, а вы остаетесь один в коридоре. ]], code [[ put(char_learr_atlantis, atl_ignis_hall_a); walk("atl_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 and not dlg_learr_suit.state) then walkin('dlg_learr_suit'); elseif (s.faint) then walkin('atl_iof_learr_faint_alone'); else return [[Некогда разговаривать. ]]; end; end; }; dlg_learr_suit = dlg { var { state = false; }; nam = "Леарр"; disp = "Леарр"; entered = function(s) s.state = true; return [[Леарр вопросительно смотрит на вас. ]]; end; 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' }; way = { vroom("В коридор",'atl_iof_main_n3'); }; }; 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 = [[ Огромный круглый зал охвачен пожаром. Освещение не работает. Клубы черного дыма заволакивают помещение, затрудняя ваши перемещения. Вы находитесь в северной части зала у самого его края. ]]; enter = 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; else lifeon(atl_iof_time_state); 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_ne2"); 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 = "Атлантида, Игнис, служебное помещение"; iof = true; dsc = [[ Небольшое помещение, используемое для хранения различного оборудования, необходимого для обслуживания Игниса. ]]; way = { kh_vroom("В главный зал", function(s) if (atl_iof_time_state.pl_safe) then return "atl_iof_main_ne3"; else pr("Я не вернусь туда без снаряжения"); return false; end; end); }; obj = { 'atl_iof_suits' }; }; atl_iof_outside = room { nam = "Атлантида, Игнис"; iof = true; entered = function(s) lifeoff(atl_iof_time_state); end; 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('atl_iof_end'); ]]}; }; }; 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; }; atl_iof_electr_dlg = dlg { nam = "Атлантида, Игнис"; entered = [[ Вы останавливаете подачу кислорода и собиратесь сообщить об этом по радио, когда из динамика радается голос Райта: "Как у вас успехи? Нужно отключить еще подачу электричества". ]]; phr = { {"Подача воздуха отключена. Как я смогу отключить электричество?", [[ Райт продолжает: "Отлично. Там рядом должна быть панель, она подписана. Там замок хитрый, но, думаю, вы разберетесь. Затем просто дергаете рубильник и дело сделано". ]], code [[ psub("next"); ]]}; {tag="next"}; {"Вас понял. Конец связи", [[ Вы быстро находите необходимую панель и приступаете к работе. ]], code [[ walk("atl_iof_electr_panel_closed"); ]]}; }; }; atl_iof_electr_panel_closed = room { var { locks = { true, true, true, true, true, true, true, true }; }; nam = "Электрощит"; pic = function(s) local image = 'images/electr_bg.png'; for i = 1, 4 do if (s.locks[i]) then image = image .. ";images/air_3.png@" .. tostring(((i - 1) % 4) * 32) .. "," .. tostring(math.floor((i - 1) / 4) * 32); else image = image .. ";images/air_1.png@" .. tostring(((i - 1) % 4) * 32) .. "," .. tostring(math.floor((i - 1) / 4) * 32); end; end; for i = 5, 8 do if (s.locks[i]) then image = image .. ";images/air_1.png@" .. tostring(((i - 1) % 4) * 32) .. "," .. tostring(math.floor((i - 1) / 4) * 32); else image = image .. ";images/air_3.png@" .. tostring(((i - 1) % 4) * 32) .. "," .. tostring(math.floor((i - 1) / 4) * 32); end; end; return image; end; dsc = [[ Перед вами расположен щиток с восемью защелками. Сейчас щиток закрыт и вы не можете его снять. ]]; obj = { "atl_iof_electr_select1", "atl_iof_electr_select2", "atl_iof_electr_select3", "atl_iof_electr_select4", "atl_iof_electr_select5", "atl_iof_electr_select6", "atl_iof_electr_select7", "atl_iof_electr_select8" }; is_solved = function(s) local unsolved = false; for i = 1, #locks do unsolved = unsolved or s.locks[i]; end; return not unsolved; end; }; atl_iof_electr_select = function(index) return obj { nam = "Защелка " .. tostring(index); dsc = "{Сдвинуть защелку " .. tostring(index) .. "}^"; act = function(s) atl_iof_electr_panel_closed.locks[index] = not atl_iof_electr_panel_closed.locks[index]; if (index ~= 4 and index ~= 8) then atl_iof_electr_panel_closed.locks[index + 1] = not atl_iof_electr_panel_closed.locks[index + 1]; end; if (index ~= 1 and index ~= 5) then atl_iof_electr_panel_closed.locks[index - 1] = not atl_iof_electr_panel_closed.locks[index - 1]; end; if (index > 4) then atl_iof_electr_panel_closed.locks[index - 4] = not atl_iof_electr_panel_closed.locks[index - 4]; end; if (index < 5) then atl_iof_electr_panel_closed.locks[index + 4] = not atl_iof_electr_panel_closed.locks[index + 4]; end; if (atl_iof_electr_panel_closed.is_solved()) then walk("atl_iof_electr_panel_open"); return ""; end; return "Вы сдвигаете защелку " .. tostring(index); end; }; end; atl_iof_electr_select1 = atl_iof_electr_select(1); atl_iof_electr_select2 = atl_iof_electr_select(2); atl_iof_electr_select3 = atl_iof_electr_select(3); atl_iof_electr_select4 = atl_iof_electr_select(4); atl_iof_electr_select5 = atl_iof_electr_select(5); atl_iof_electr_select6 = atl_iof_electr_select(6); atl_iof_electr_select7 = atl_iof_electr_select(7); atl_iof_electr_select8 = atl_iof_electr_select(8); atl_iof_electr_panel_open = dlg { nam = "Атлантида, Игнис"; dsc = [[ Вы снимаете щиток и дергаете рубильник. Судя по всему, Игнис сейчас должен быть обесточен. По радио вы сообщаете Райту о завершении работ. ]]; phr = { {"Подача электричества в Игнис отключена, возвращаюсь на станцию", [[ В динамике вы слышите голос Райта: "Отлично, возвращайтесь".^ ]], code [[ walk("atl_iof_end"); ]]}; }; }; atl_iof_end = room { nam = "Атлантида"; dsc = [[ Вы возвращаетесь на станцию и сразу же отправляетесь в свою комнату, чтобы отдохнуть. Вы просыпаетесь утром, полностью готовый заняться новыми делами. ^ Почти сразу к вам в комнату входят двое охранников. Они просят вас проследовать за ними к начальнику службы безопасности - Винсенту Даркстару. У вас нет никакого выхода, кроме как пойти с ними... ]]; entered = function(s) atl_lfc_state = 1; if (atl_iof_time_state.learr_safe) then atl_iof_learr_suit = true; end; if (atl_iof_time_state.carry_learr or atl_iof_time_state.learr_safe or not char_learr_iof.faint) then -- learr saved put(char_learr_atlantis, atl_oculus_lab_c); else atl_iof_learr_dead = true; put(char_aikerjarr, atl_oculus_lab_b); end; atl_iof_completed = true; end; obj = { vway("Продолжить", "{Продолжить}", "atl_lfc_darkstar_dlg"); }; };