diff --git a/atlantis.lua b/atlantis.lua --- a/atlantis.lua +++ b/atlantis.lua @@ -1,3 +1,10 @@ +global { + atl_rep_moreau = 0; + atl_rep_darkstar = 0; + atl_rep_svetlova = 0; + atl_rep_wright = 0; +}; + atlantis_illuminators = obj { nam = "Иллюминаторы"; dsc = [[ @@ -214,6 +221,7 @@ atlantis_luna_main_corridor = room { Узкий длинный коридор. По обе его стороны расположены двери, ведущие в комнаты персонала. Яркий свет электрических ламп освещает помещение. ]]; way = { + kh_vroom("В вашу комнату", "atlantis_luna_drake_room"); kh_vroom("В общую комнату", "atlantis_luna_common_room"); kh_vroom("В секцию \"Доминус\"", "atlantis_intersection_luna_dominus"); }; @@ -222,6 +230,18 @@ atlantis_luna_main_corridor = room { }; }; +atlantis_luna_drake_room = room { + nam = "Атлантида, Луна, ваша комната"; + dsc = [[ + ]]; + way = { + kh_vroom("В главный коридор", "atlantis_luna_main_corridor"); + }; + obj = { + "atlantis_illuminators" + }; +}; + atlantis_arctos_main_corridor = room { nam = "Атлантида, Арктос, главный коридор"; dsc = [[ @@ -440,7 +460,6 @@ atlantis_oculus_lab_c = room { kh_vroom("В коридор", "atlantis_oculus_main_corridor"); }; obj = { - "char_learr_atlantis", "char_ryveerr", "char_anna_atlantis", "char_loong" @@ -525,10 +544,18 @@ atlantis_ignis_main_hall = room { atlantis_ignis_hall_a = room { nam = "Атлантида, Игнис, зал А"; + enter = function(s) + if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then + if (where(char_jack_wright_atlantis) ~= atlantis_ignis_hall_a) then + put('char_jack_wright_atlantis', 'atlantis_ignis_hall_a'); + end; + end; + end; dsc = [[ Средних размеров прямоугольный зал. ]]; obj = { + "char_learr_atlantis"; 'ignis_illuminator'; 'ignis_screen'; 'ignis_projector'; @@ -754,6 +781,9 @@ char_anna_atlantis_dlg = dlg { }; char_learr_atlantis = npc { + var { + offended = false; + }; nam = "Леарр"; __where__ = 'atlantis_oculus_lab_c'; dsc = function(s) @@ -772,12 +802,46 @@ char_learr_atlantis_dlg = dlg { nam = "Леарр"; disp = "Леарр"; entered = function(s) - return [[ - Временная затычка диалога - ]]; + if (state == 0) then + if (char_learr_atlantis.offended) then + psub("offended"); + return [[ + Леарр поворачивается к вам, плавники ее становятся ярко-оранжевыми, а она говорит: "Я приветствую тебя-презренный-монстр-he'vji'a'rr". + ]]; + else + psub("generic"); + return [[ + Леарр поворачивается к вам, плавники ее становятся сине-зелеными, а она говорит: "Я приветствую тебя-he'vji'a'rr". + ]]; + end; + end; end; phr = { - {0, always=true, "Ну все, пока", "Прощай, смертный", code [[ back(); ]]}; + {tag='offended'}; + {"He'vji'a'rr?", [[ + Леарр, кажется, улыбнулась, обнажив два ряда острых треугольных зубок: "Ты неплохо-говоришь. Я легко-понимаю тебя. He'vji'a'rr - вверху-разумный-живой. Монстр-ты понимаешь?" + ]]}; + {"Монстр?", [[ + "Ты чуждо-для-нас-выглядишь, поэтому монстр. Ты так-мыслил. Я права?" + ]], code [[ psub('offended_yes_no') ]]}; + {tag='offended_yes_no'}; + {"Да, наверное так", [[ + "Мы будем-продолжать-друг-друга-монстрами-называть?" + ]], code [[ psub('no_offence') ]]}; + {"Просто мы люди, а ты чудовище", [[ + Леарр скалится, показывая блестящие острые зубки: "Лучше-уходи. Я не-хочу-этими-зубами-перекусить твое-горло". + ]], code [[ back(); ]]}; + {tag='no_offence'}; + {"Нет, вообще-то у меня разговор есть", [[ + "Ты-говори" + ]], code [[ walk('atl_iof_intro'); ]]}; + {tag='generic'}; + {"He'vji'a'rr?", [[ + Леарр, кажется, улыбнулась, обнажив два ряда острых треугольных зубок: "Ты неплохо-говоришь. Я легко-понимаю тебя. Вы-He'vji'a'rr - вверху-разумный-живой, с-поверхности. Мы-na'vji'a'rr - внизу-разумный-живой, из-глубин". + ]]}; + {"Я хотел кое-что спросить", [[ + "Ты-говори" + ]], code [[ walk('atl_iof_intro'); ]]}; }; }; @@ -880,6 +944,57 @@ char_winterlight_dlg = dlg { }; }; +char_jack_wright_atlantis = npc { + nam = "Джек Райт"; + dsc = function(s) + if (where(char_jack_wright_atlantis) == atlantis_ignis_hall_a) then + return [[ + {Джек Райт} сидит рядом и о чем-то с ней разговаривает. + ]]; + else + return [[ + {Джек Райт} + ]]; + end; + end; + dlg = "char_jack_wright_atlantis_dlg"; +}; + +char_jack_wright_atlantis_dlg = dlg { + var { + state = 0; + }; + nam = 'char_jack_wright_atlantis_dlg'; + entered = function(s) + if (state == 0) then + psub("business_or_no"); + return [[ + Джек отворачивается от Леарр, и обращается к вам: "Привет, ты по делу или просто так?" + ]]; + end; + end; + phr = { + {tag = "business_or_no"}; + {"Как тебе станция?", [[ + "Невероятно! Поверить не могу, что мой отец вместе с твоим это все придумали и создали. Это совершенство, никак не меньше - они уже десять лет почти живут без связей с поверхностью, не испытывая при этом никаких проблем". + ]]}; + {always = "true", "Я с Леарр поговорить пришел", function(s) + if (char_learr_atlantis.offended) then + return [[ + Джек ухмыльнулся: "Удачи, я подожду в главном зале". Джек поднялся и вышел. + ]]; + else + return [[ + "Надеюсь, я вам не помешаю? В любом случае, я подожду в главном зале". Джек поднялся и вышел. + ]]; + end; + end, code [[ + remove('char_jack_wright_atlantis', 'atlantis_ignis_hall_a'); + back(); + ]]}; + }; +}; + char_michael_wright = npc { nam = "Майкл Райт"; dsc = [[ 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 diff --git a/atlantis_intro.lua b/atlantis_intro.lua --- a/atlantis_intro.lua +++ b/atlantis_intro.lua @@ -1,14 +1,5 @@ atlantis_intro_dock = room { nam = "Подводная станция"; - --entered = function(s) - -- if (ArrayUtils.indexOf(pl.party, 'wright') ~= 0) then - -- print("with wright"); - -- place(vway("continue", "{Продолжить}", atlantis_intro_radio_dlg), s); - -- else - -- print("alone"); - -- place(vway("continue", "{Продолжить}", atlantis_intro_radio_dlg_alone), s); - -- end; - --end; dsc = [[ В большом прямоугольном зале, ярко освещенном электрическими лампами слышен шум воды, плещущейся под вами. Шлюзовая дверь в стене зала открывается и внутрь входит группа вооруженных людей. ^ Шесть человек в черных блестящих костюмах, тяжелых ботинках и с револьверами в руках берут вас на прицел. ^ diff --git a/game_over.lua b/game_over.lua --- a/game_over.lua +++ b/game_over.lua @@ -59,4 +59,13 @@ game_over_victory =room { dsc = [[ Как только последний генератор затихает, свет начинает медленно тускнеть. Вы слышите, как по всему городу экстренно открываются двери и понимаете, что у вас есть всего несколько минут прежде чем вода хлынет и в этот зал. Вы в спешке приводите в сознание ваших напарников и одеваете скафандр. ]]; +}; + +game_over_ignis = room { + nam = "Игра окончена"; + disp = "Игра окончена"; + hideinv = true; + dsc = [[ + У вас кружится голова от нестерпимого жара. Не в силах стоять, вы опускаетесь на горячий пол. С каждым вдохом вы чувствуете едкий дым, проникающий в ваши легкие. Леарр подбегает к вам, чтобы помочь. Вы пытаетесь подняться, но падаете снова и теряете сознание. + ]]; }; \ No newline at end of file diff --git a/images/air_0.png b/images/air_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2af47b4756fb93318ac49a8bd0b6d136847ab96c GIT binary patch literal 359 zc%17D@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4>;vjb?hIQv;UIIBR>5jgR3=A9l zx&I`x0{NT;9+AZi419+{nDKc2iWH#WA5Ry@kO=p);TMG(6gW=*`#)cM?_pyJ_N1b( zLHrM9L^nOHnwR`Zb7@D<0VDU14aEj5PdXop&VEpOQ9#>$9+#hw(t#rvqL`c9Z)RP) zc+I+%ukY=wFX@wcXMSP*XZm=fM@U10-RUgVea-Jvd|8XW@!Bv;h<@nLjlX#Al&jx* z%gi$m*H2seJ;UsmUvk{`nY;IXbMsGb-jo#;CHErzKi3ZF6pKxs&wlycEqk{<*!s)f zHG2w`4QiJgx)(cg?J%3Lq#^r~$p@XgmBO#j7;_2aecx5;e#iUs+&6*zf^D}08?Np7 zXTH7vms|8Y_49l5F1|l_Ji+9Bw4svvCI9`qmfoB5cLQH&--&2oI52p+`njxgN@xNA D#=n^{ diff --git a/images/air_1.png b/images/air_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff3a240e41d93a0f1276990221b05316bb7b58d GIT binary patch literal 359 zc%17D@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4>;vjb?hIQv;UIIBR>5jgR3=A9l zx&I`x0{NT;9+AZi419+{nDKc2iWH#WA5Ry@kO=p);TQQ1D{$!i{$KyjO<1bCfg||V zbX~W1777go|Mn$+Vs1F6#8BMOK4-G0%RK8lj}ZZ+5D>;5U-chs@`(6=GINPMeq zXrJ(*%l8&P3b9_ZIq0co(aP+zEgG(N&MJ4;s$QQ}7dAE3-*;`;Pp?+xH&suqKi}iq z82yuv{l^y_-sak zWftT1)qyFj@^;fRjz7*exc_(Bo~v7AK7Bs1`4u+@$9nc{=`s6&;lSYO>gTe~DWM4f DzYLb` diff --git a/images/air_2.png b/images/air_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f72fd1dd5a68e1efc5506b839d6b92e3b7ebfc GIT binary patch literal 356 zc%17D@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4>;vjb?hIQv;UIIBR>5jgR3=A9l zx&I`x0{NT;9+AZi419+{nDKc2iWH#WPfr)ekO=p);kSia6*zqU|DW&wlBf4!5lhIa z<8BetZm0cKX4f?^e33wCFRS=Kg>6e|i}B`w_`e6X{VeTGC|jYENc^vY6| z`kkwrm12+mTa)VS`->s|><(Tb)(eK)H_h5v-~2wsm$B%Zs11_@>xbSg+qXK;wG56v zDb{z3PvMF2_OE@bY)#`bwwH6i{gp5+WS@;qs#c`lp_ouptG}%8{dRAuw_UTvY$t0k zSHq?|y|;SmvL!Fu?s&L}siJ;vjb?hIQv;UIIBR>5jgR3=A9l zx&I`x0{NT;9+AZi419+{nDKc2iWH#WKTj9OkO=p)({Bnj8*sQD{r~@YlvT4cXLOV2 z7uV&Y=k^M0KJdI+cCI*si6C<(--!dNJq|yt>z{QQB{^BJe|Qozfo;>HioVOMEZC|O zm>%8DVt%?oLTk=~NcVXRukA&yOu4H){aL`SO;u~3{%ubGrSf~8WQ2(F=h?RJ|NLr; z+y8LyI`@oC|LuQp8FW5nx)=CuqET4#H>>!Y`8U7sJ-51c^^xgwzMsjPbwX&*BdKKn z{HrU~zE8`3@~+hGbgbI@y64)z{{gaFF{T-hN3^QNGMLW-8G