Changeset - 99af403fcdf0
[Not reviewed]
default
0 3 0
Silverwing - 7 years ago 2017-11-05 19:43:43

Atlantis suit fix and fta fix
3 files changed with 41 insertions and 38 deletions:
0 comments (0 inline, 0 general)
atlantis_dlg.lua
Show inline comments
 
@@ -921,212 +921,215 @@ char_svetlova_dlg = dlg {
 
        ]]};
 
        {"Нет, оставайся на Атлантиде", [[Леарр разочарованно отвечает: "Я на-Атлантиде-останусь", -- и выходит из комнаты. ^Светлова качает головой: "Вы зря отказались от ее помощи, Дрейк. Навьяр на борту мог бы оказаться очень полезен. Но, к делу. Вы говорили, что нашли фрагмент карты. Можете показать его?" ]], [[
 
            move("char_learr_atlantis", "atl_oculus_library");
 
            psub("iyh_more");
 
        ]]};
 
		{tag="iyh_more"};
 
        {"[Передать фрагмент карты]Да, конечно. Мы нашли это в скрытом помещении в храме.", [[Екатерина Светлова с интересом рассматривает табличку: "Удивительно, это явно очень старое, но это может быть все что угодно. Да, это карта, она сильно отличается от других навьярских карт, виденных нами. Обратите внимание, на количество деталей -- здесь не только отмечены условными символами три-четыре ориентира. Здесь их десятки, если не сотни. Попробуйте разузнать побольше в Ираафаанотре и Дипатреанотре". ]], code [[ psub("generic"); ]]};
 
	};
 
};
 
 
char_michael_wright_dlg = dlg {
 
    var {
 
        state = 0;
 
        lfc_dialog = false;
 
    };
 
    nam = "Майкл Райт";
 
    disp = "Майкл Райт";
 
    
 
    reset_more = function(s)
 
        poff("on_drake", "on_black", "on_darkstar", "on_svetlova", "on_moreau", "on_wright", "on_leroy", "on_jones", "on_goldman", "on_atlantis", "on_navjiarr", "on_learr", "on_aikerjarr", "on_ryveerr", "more_questions");
 
        if (atl_rep_wright < 0) then
 
            if (char_michael_wright.drake_asked == 0) then pon("on_drake"); pon("more_questions"); end;
 
            if (char_michael_wright.black_asked == 0) then pon("on_black"); pon("more_questions"); end;
 
            if (char_michael_wright.darkstar_asked == 0) then pon("on_darkstar"); pon("more_questions"); end;
 
            if (char_michael_wright.svetlova_asked == 0) then pon("on_svetlova"); pon("more_questions"); end;
 
            if (char_michael_wright.moreau_asked == 0) then pon("on_moreau"); pon("more_questions"); end;
 
            if (char_michael_wright.wright_asked == 0) then pon("on_wright"); pon("more_questions"); end;
 
            
 
            if (atl_iof_completed) then
 
                if (char_michael_wright.leroy_asked == 0) then pon("on_leroy"); pon("more_questions"); end;
 
                if (char_michael_wright.jones_asked == 0) then pon("on_jones"); pon("more_questions"); end;
 
                if (char_michael_wright.goldman_asked == 0) then pon("on_goldman"); pon("more_questions"); end;
 
            end;
 
            
 
            if (char_michael_wright.atlantis_asked == 0) then pon("on_atlantis"); pon("more_questions"); end;
 
            if (char_michael_wright.navjiarr_asked == 0) then pon("on_navjiarr"); pon("more_questions"); end;
 
            if (char_michael_wright.learr_asked == 0) then pon("on_learr"); pon("more_questions"); end;
 
            if (char_michael_wright.ryveerr_asked == 0) then pon("on_ryveerr"); pon("more_questions"); end;
 
            if (atl_iof_learr_dead and char_michael_wright.aikerjarr_asked == 0) then pon("on_aikerjarr"); pon("more_questions"); end;
 
        else
 
            if (char_michael_wright.drake_asked < 2) then pon("on_drake"); pon("more_questions"); end;
 
            if (char_michael_wright.black_asked < 2) then pon("on_black"); pon("more_questions"); end;
 
            if (char_michael_wright.darkstar_asked < 2) then pon("on_darkstar"); pon("more_questions"); end;
 
            if (char_michael_wright.svetlova_asked < 2) then pon("on_svetlova"); pon("more_questions"); end;
 
            if (char_michael_wright.moreau_asked < 2) then pon("on_moreau"); pon("more_questions"); end;
 
            if (char_michael_wright.wright_asked < 2) then pon("on_wright"); pon("more_questions"); end;
 
            if (atl_iof_completed) then
 
                if (char_michael_wright.leroy_asked < 2) then pon("on_leroy"); pon("more_questions"); end;
 
                if (char_michael_wright.jones_asked < 2) then pon("on_jones"); pon("more_questions"); end;
 
                if (char_michael_wright.goldman_asked < 2) then pon("on_goldman"); pon("more_questions"); end;
 
            end;
 
            
 
            if (char_michael_wright.atlantis_asked < 2) then pon("on_atlantis"); pon("more_questions"); end;
 
            if (char_michael_wright.navjiarr_asked < 2) then pon("on_navjiarr"); pon("more_questions"); end;
 
            if (char_michael_wright.learr_asked < 2) then pon("on_learr"); pon("more_questions"); end;
 
            if (atl_iof_learr_dead and char_michael_wright.learr_asked < 3) then pon("on_learr"); pon("more_questions"); end;
 
            if (char_michael_wright.ryveerr_asked < 2) then pon("on_ryveerr"); pon("more_questions"); end;
 
            if (atl_iof_learr_dead and char_michael_wright.aikerjarr_asked < 2) then pon("on_aikerjarr"); pon("more_questions"); end;
 
        end;
 
    end;
 
    
 
    enter = function(s)
 
        if (atl_lfc_panic_warning == 2 and atl_lfc_panic == 2 and atl_lfc_state == 1) then
 
            psub("lfc_warning");
 
            return [[Майкл Райт сообщает вам: "Добрый день. Винсент Даркстар просил вас срочно поговорить с ним". ]];
 
        end;
 
        poff('nih_fixed');
 
        if atl_nih_state == 2 or atl_nih_state == 1 then
 
            pon('nih_fixed');
 
        end;
 
        
 
        if (atl_lfc_state ~= 1) then
 
            poff('sabotage', 'ignis_what');
 
        end;
 
        
 
        if (atl_lfc_state == 1 and not s.lfc_dialog) then
 
            s.lfc_dialog = true;
 
            pon('sabotage', 'ignis_what');
 
        end;
 
        
 
        s:reset_more();
 
        
 
        if (atl_iof_completed and char_michael_wright.iof_reaction == 0) then
 
            char_michael_wright.iof_reaction = 1;
 
            if (atl_iof_learr_dead) then
 
                psub("iof_learr_dead");
 
                return [[Майкл Райт обращается к вам: "Господин Дрейк, рад видеть вас живым и здоровым. Трагедия на Игнисе стала для нас неожиданностью. Быть может, если бы мы были готовы к такому, Леарр была бы здесь, с нами". ]];
 
            elseif (atl_iof_learr_suit) then
 
                psub("iof_learr_suit");
 
                return [[Майкл Райт обращается к вам: "Господин Дрейк, рад видеть вас живым и здоровым. Авария на Игнисе стала для нас неожиданностью, однако благодаря вашим действиям никто не пострадал, а мы получили ценный опыт". ]];
 
            else
 
                psub("iof_learr");
 
                return [[Майкл Райт обращается к вам: "Господин Дрейк, рад видеть вас живым и здоровым. Авария на Игнисе стала для нас неожиданностью, однако благодаря вашим действиям никто не пострадал". ]];
 
            end;
 
        elseif (atl_nih_state == 3 and atl_iof_completed and atl_fta_state == 0) then
 
            atl_fta_state = 1;
 
            psub("fta_agree");
 
            return [[Майкл Райт просматривает какие-то чертежи. Как только вы подходите, он отвлекается и приветствует вас: "Добрый день. У меня есть для вас работа. Сейчас все наши бригады заняты, поэтому я прошу вас помочь с обслуживанием Солиса. Приходите туда и свяжитесь со мной по телефону, я дам вам инструкции". ]];
 
        elseif (atl_fta_state == 2) then
 
            atl_fta_state = 3;
 
            psub("fta_deb");
 
            return [[Майкл Райт протягивает вам руку: "Только благодаря вам, мы все еще здесь. Я с радостью сообщу Моро, что я за возвращение вам Левиафана". ]];
 
        else
 
            psub("generic");
 
            return [[Майкл Райт просматривает какие-то чертежи. Как только вы подходите, он отвлекается и приветствует вас: "Добрый день. Чем могу быть полезен?" ]];
 
        end;        
 
    end;
 
    phr = {
 
        {tag="lfc_warning"};
 
        {always=true, "Мне пора.", [["До встречи", -- Майкл Райт возвращается к своим делам. ]], code [[ back(); ]]};
 
        {tag="iof_learr_dead"};
 
        {"Мне очень жаль.", [[Майкл Райт кивает: "Утерянного не вернуть. Мы сделали выводы и постараемся не допустить опасных инцидентов в будущем". ]], code [[psub("generic");]]};
 
        {"Я чуть не погиб там!", [[Майкл Райт отворачивается от вас и произносит: "Приходите позже, я занят". ]], code [[ atl_rep_wright = atl_rep_wright - 1; back(); ]]};
 
        {tag="iof_learr_suit"};
 
        {"Я сделал, что должен был. ", [[Майкл Райт кивает: "И все же, не каждому пришла бы в голову идея облачить навьяра в скафандр".]], code [[psub("generic");]]};
 
        {tag="iof_learr"};
 
        {"Рад, что никто не пострадал. ", [[Майкл Райт кивает. ]], code [[ psub("generic"); ]]};
 
        {tag="fta_agree"};
 
        {"Хорошо, я сделаю, что смогу. ", [[Майкл Райт спрашивает: "Вы что-то еще хотели?" ]], code [[psub("generic"); ]]};
 
        {tag="fta_deb"};
 
        {"[Пожать руку]Только я все еще не знаю, куда мне следует плыть", [[Майкл Райт кивает: "Мы сделаем все возможное, чтобы помочь вам. Светлова сказала мне, что вы помогаете ей в решении каких-то проблем с навьярами. По ее мнению, это может помочь вам в поисках". ]], code [[ psub('generic'); ]]};
 
        {"Просто верните мне Левиафан", [[Майкл Райт с сожалением произносит: "Не все так просто. Нужно, чтобы согласие дали еще Моро, Даркстар и Светлова". ]], code [[ psub('generic'); ]]};
 
        {tag="ask_more"};
 
        {tag="on_drake", false, "Расскажите об Уильяме. ", function()
 
            if (atl_rep_wright < 0) then
 
                char_michael_wright.drake_asked = 1;
 
                return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]];
 
            else
 
                char_michael_wright.drake_asked = 2;
 
                return [[Майкл Райт отвечает: "Я познакомился с вашим отцом во время нашей учебы в университете. Он никогда не относился серьезно к учебе, но уже тогда он умел собирать вокруг себя людей. Создание Вестхейвен Трансоушен было его идеей. Я помню, как мы с Моро первое время очень сомневались, стоит ли ввязываться в подобную авантюру. Дрейк активно развивал компанию, пока она существовала. Наверное, любой другой на месте Дрейка отправил бы меня лечиться, услышав мое предложение создать подводный корабль. Уильям тогда внимательно выслушал меня, задал пару вопросов и выделил деньги на проект". ]];
 
            end;
 
        end};
 
        {tag="on_jack", false, "Расскажите о своем сыне. ", function()
 
            if (atl_rep_wright < 0) then
 
                char_michael_wright.jack_asked = 1;
 
                return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]];
 
            else
 
                char_michael_wright.jack_asked = 2;
 
                if (atl_jack_in_party) then
 
                    return [[Майкл Райт отвечает: "Мой сын, Джек, остался на поверхности вместе с моей женой, Элис. Я оставил им дом и немаленькое состояние, в надежде, что они справятся сами. Жаль, что все так получилось. Элис умерла, а Джек потратил лучшие годы на безуспешные попытки найти меня. Спасибо, что взяли моего сына с собой". ]];
 
                else
 
                    psub("son");
 
                    return [[Майкл Райт отвечает: "Мой сын, Джек, остался на поверхности вместе с моей женой, Элис. Я оставил им дом и немаленькое состояние, так что надеюсь, что у них все хорошо". ]];
 
                end;
 
            end;
 
        end};
 
        {tag="on_black", false, "Расскажите об Адриане Блэке. ", function()
 
            if (atl_rep_wright < 0) then
 
                char_michael_wright.black_asked = 1;
 
                return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]];
 
            else
 
                char_michael_wright.black_asked = 2;
 
                return [[Майкл райт отвечает: "Адриан -- университетский друг вашего отца. Он всегда уравновешивал Дрейка во многих отношениях. Там где Дрейк готов был пойти на риск, Блэк призывал к осторожности. Там где Дрейк соглашался на уступки, Блэк стоял до последнего. К слову, мою идею с субмариной Адриан не одобрил. К счастью, ваш отец все же позволил мне этим заняться". ]];
 
            end;
 
        end};
 
        {tag="on_darkstar", false, "Расскажите о Винсенте Даркстаре ", function()
 
            if (atl_rep_wright < 0) then
 
                char_michael_wright.darkstar_asked = 1;
 
                return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]];
 
            else
 
                char_michael_wright.darkstar_asked = 2;
 
                return [[Майкл Райт отвечает: "Я почти ничего о нем не знаю. Впрочем, не думаю, что кто-то на станции может сказать о нем что-то. Параноидальный тип. Я вообще не понимаю, как он согласился сюда пеерехать. Тогда он мне целый допрос устроил -- чуть ли не в каждую линию на чертеже тыкал и спрашивал для чего это нужно. Думаю, мне стоит гордиться, что Атлантида прошла его проверку". ]];
 
            end;
 
        end};
 
        {tag="on_svetlova", false, "Расскажите о Екатерине Светловой. ", function()
 
            if (atl_rep_wright < 0) then
 
                char_michael_wright.svetlova_asked = 1;
 
                return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]];
 
            else
 
                char_michael_wright.svetlova_asked = 2;
 
                return [[Майкл Райт отвечает: "Екатерина присоединилась к нам достаточно поздно -- уже после испытаний Надежды. Странно, что ей не пришла в голову идея построить Атлантиду. Впрочем, ее мало интересует техническая сторона вопроса -- она здесь чтобы изучать навьяров и не скрывает это". ]];
 
            end;
 
        end};
 
        {tag="on_moreau", false, "Расскажите о Фредерике Моро. ", function()
 
            if (atl_rep_wright < 0) then
 
                char_michael_wright.moreau_asked = 1;
 
                return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]];
 
            else
 
                char_michael_wright.moreau_asked = 2;
 
                return [[Майкл Райт отвечает: "Фредерик с нами с самого начала. Хотя его влияние может показаться незначительным -- многие на станции даже не слышали о нем, пока он не занял пост управляющего -- он все же делал важное дело. Благодаря ему мы смогли завершить многие проекты вовремя, ведь за все поставки материалов отвечал именно он. С управлением станцией он так же справляется неплохо, хотя здесь все гораздо проще, чем было на поверхности". ]];
 
            end;
 
        end};
 
        {tag="on_wright", false, "Расскажите о себе. ", function()
 
            if (atl_rep_wright < 0) then
 
                char_michael_wright.wright_asked = 1;
 
                return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]];
 
            else
 
                char_michael_wright.wright_asked = 2;
 
                if (atl_jack_in_party) then
 
                    return [[Майкл Райт отвечает: "Родился я в Лондоне. Окончил один из местных университетов, получив специальность инженера-кораблестроителя. Вместе с вашим отцом, Фредериком Моро и Адрианом Блэком мы основали Вестхейвен Трансоушен. Поначалу моя работа была далеко не идеальной -- мы купили несколько старых кораблей и привели их в порядок. Мы довольно быстро заработали хорошую репутацию. Дела шли на подъем и, наконец, у нас появились собственные верфи. К этому времени я уже имел глупость жениться. Я спроектировал несколько судов для компании. Лучшим была Огненная Стрела -- быстроходный комфортабельный пароход, вмещающий больше двух сотен пассажиров. Ну и наконец мы построили Надежду. Сказать, что мы удивилсь, когда встретили навьяров -- ничего не сказать. К сожалению, встреча не прошла бескровно -- наши люди просто вышли поговорить, показать себя. А эти рыбни закидали несчастных супругов Барнз копьями! Блэк тогда не дал мне пустить торпеду в этих уродов, и я до сих пор зол на него за это, хотя умом понимаю, что он был прав. Да и не было бы никакой Атлантиды, убей я тогда тех навьяров. Несколько месяцев мы обсуждали, что делать дальше. Потом мы с Сильвией придумали Атлантиду и переселились сюда, -- Райт вздыхает, -- В своем увлечении я позабыл обо всем. Я оставил свою жену, Элис, и сына, Джека, на поверхности. Если честно, я скорее жалею, что женился, чем что оставил их там. Это не делает мою ошибку меньше". ]];
 
                else
 
                    return [[Майкл Райт отвечает: "Родился я в Лондоне. Окончил один из местных университетов, получив специальность инженера-кораблестроителя. Вместе с вашим отцом, Фредериком Моро и Адрианом Блэком мы основали Вестхейвен Трансоушен. Поначалу моя работа была далеко не идеальной -- мы купили несколько старых кораблей и привели их в порядок. Мы довольно быстро заработали хорошую репутацию. Дела шли на подъем и, наконец, у нас появились собственные верфи. К этому времени я уже имел глупость жениться. Я спроектировал несколько судов для компании. Лучшим была Огненная Стрела -- быстроходный комфортабельный пароход, вмещающий больше двух сотен пассажиров. Ну и наконец мы построили Надежду. Сказать, что мы удивилсь, когда встретили навьяров -- ничего не сказать. К сожалению, встреча не прошла бескровно -- наши люди просто вышли поговорить, показать себя. А эти рыбни закидали несчастных супругов Барнз копьями! Блэк тогда не дал мне пустить торпеду в этих уродов, и я до сих пор зол на него за это, хотя умом понимаю, что он был прав. Да и не было бы никакой Атлантиды, убей я тогда тех навьяров. Несколько месяцев мы обсуждали, что делать дальше. Потом мы с Сильвией придумали Атлантиду и переселились сюда". ]];
 
                end;
 
            end;
 
        end};
 
        {tag="on_leroy", false, "Что вы думаете о Мишеле Леруа? ", function()
 
            if (atl_rep_wright < 0) then
 
                char_michael_wright.leroy_asked = 1;
 
                return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]];
 
            else
 
                char_michael_wright.leroy_asked = 2;
 
                return [[Майкл Райт отвечает: "Мишель Леруа уже давно создает проблемы на Атлантиде -- он первым начал активно поднимать вопрос возвращения на поверхность. Не думаю, что вам стоит на него обращать внимание". ]];
 
            end;
 
        end};
 
        {tag="on_jones", false, "Что вы думаете о Чарли Джонсе? ", function()
 
            if (atl_rep_wright < 0) then
 
                char_michael_wright.jones_asked = 1;
 
                return [[Майкл Райт отвечает: "Я не хочу об этом говорить". ]];
 
            else
 
                char_michael_wright.jones_asked = 2;
 
                return [[Майкл Райт отвечает: "Джонс, кажется, не в восторге, что наше пребывание на Атлантиде затянулось. К счастью, в отличие от Леруа, он не пытается всех убедить в своей правоте. Если вас интересует, мог ли он саботировать Игнис, то я не считаю это вероятным". ]];
 
            end;
 
        end};
 
        {tag="on_goldman", false, "Что вы думаете о Леонарде Голдмане? ", function()
 
            if (atl_rep_wright < 0) then
atlantis_from_the_ashes.lua
Show inline comments
 
atl_fta_is_terra_solis = room {
 
    var {
 
        state = 0;
 
    };
 
	nam = "Атлантида, межсекционный кодидор";
 
	dsc = [[
 
		Небольшой коридор, соединяющий секции Терра и Солис. Яркий свет электрических ламп освещает помещение. 
 
	]];
 
	dsc = [[Небольшой коридор, соединяющий секции Терра и Солис. Яркий свет электрических ламп освещает помещение.  ]];
 
	entered = function(s)
 
		if (s.state == 0) then
 
			return [[
 
				Вы входите в межсекционный коридор Солиса и в этот момент станцию сотрясает взрыв. Свет на мгновение моргает. Раздается звонок телефона. 
 
			]];
 
		end;
 
	end;
 
	way = {
 
		kh_vroom("В секцию Терра", "atl_fta_game_over_left");
 
		kh_vroom("В секцию Солис", function(s)
 
			if (atl_fta_phone.state == 1 and have(item_atl_fta_suit)) then
 
				return "atl_fta_solis_entry";
 
			else
 
				pr [[Вы вот так просто войдете в секцию где только что произошел взрыв?]];
 
				return false;
 
			end;
 
		end);
 
	};
 
	obj = {
 
		"atl_fta_phone",
 
		"item_atl_fta_suit"
 
	};
 
};
 
 
item_atl_fta_suit = suit {
 
	var {
 
		dlg = nil;
 
	};
 
	nam = "Скафандр";
 
	dsc = [[В углу, так же как и в других межсекционных коридорах стоит {скафандр}, который используется в случае чрезвычайной ситуации. ]];
 
	tak = function(e)
 
		if (atl_fta_phone.state == 1) then
 
			return "Вы одеваете скафандр", true;
 
		else
 
			return "Вам незачем это делать", false;
 
		end;
 
	end;
 
};
 
 
atl_fta_phone = obj {
 
	var {
 
		state = 0;
 
	};
 
	nam = "Телефон";
 
	dsc = function(s)
 
		if (s.state == 0) then
 
			return [[
 
				На стене висит звонящий {телефонный аппарат}.
 
			]];
 
		else
 
			return [[
 
				На стене висит {телефонный аппарат}.
 
			]];
 
		end;
 
	end;
 
	act = function(s)
 
		if (s.state == 0) then
 
			s.state = 1;
 
			walk("atl_fta_dlg_phone");
 
		else
 
			return false;
 
		end;
 
	end;
 
};
 
 
atl_fta_dlg_radio = dlg {
 
	var {
 
		state = 0;
 
	};
 
	nam = "Радио";
 
	entered = function(s)
 
		if (s.state == 0) then
 
			psub("tuning");
 
			return [[
 
				Радио не настроено
 
			]];
 
			return [[Радио не настроено. ]];
 
		elseif (s.state == 1) then
 
			psub("ok");
 
			return [[
 
				Радио настроено, вы можете говорить
 
			]];
 
			return [[Радио настроено, вы можете говорить. ]];
 
		elseif (s.state == 2) then
 
			psub("next");
 
			return [[
 
				Радио настроено, вы можете говорить
 
			]];
 
			return [[Радио настроено, вы можете говорить. ]];
 
		elseif (s.state == 3) then
 
			psub("more");
 
			return [[
 
				Радио настроено, вы можете говорить
 
			]];
 
			return [[Радио настроено, вы можете говорить. ]];
 
		end;
 
	end;
 
	phr = {
 
		{tag="tuning"};
 
		{"[Настроить приемник]Прием, как слышите?", [[
 
			Через несколько минут настройки, вы слышите в динамике голос Райта: "Да, Дрейк".
 
			Через несколько минут настройки, вы слышите в динамике голос Райта: "Слушаю вас, Дрейк".
 
		]], code [[ atl_fta_dlg_radio.state = 1; psub("ok"); ]]};
 
		{tag="ok"};
 
		{"Что мне делать?", [[
 
			"Что вы видите?"
 
		]], code [[ atl_fta_dlg_radio.state = 2; psub("what_i_see"); ]]};
 
		{tag="what_i_see"};
 
		{"К юго-востоку от меня вижу огонь, скорее всего взрыв был там. Здесь жарко. В остальном все вроде пока в порядке", [["Идите по западной стороне. Ваша задача -- попасть в центр секции с северной стороны. Вы увидите несколько вентилей. Вам надо будет перекрыть их все. Там хитрая защита от случайного закрытия, но я думаю, вы справитесь". ]], code [[ back(); ]]};
 
		{"К юго-востоку от меня вижу огонь, скорее всего взрыв был там. Здесь жарко. ", [[Райт инструктирует вас: "Идите по западной стороне. Ваша задача -- попасть в центр секции с северной стороны. Вы увидите несколько вентилей. Вам надо будет перекрыть их все. Там хитрая защита от случайного закрытия, но я думаю, вы справитесь". ]], code [[ psub("clear"); ]]};
 
		{tag="next"};
 
		{"Что мне делать?", [["Идите по западной стороне. Ваша задача -- попасть в центр секции с северной стороны. Вы увидите несколько вентилей. Вам надо будет перекрыть их все. Там хитрая защита от случайного закрытия, но я думаю, вы справитесь". ]]};
 
		{always=true, "Что мне делать?", [["Идите по западной стороне. Ваша задача -- попасть в центр секции с северной стороны. Вы увидите несколько вентилей. Вам надо будет перекрыть их все. Там хитрая защита от случайного закрытия, но я думаю, вы справитесь". ]]};
 
        {"Конец связи. ", "", code [[ back(); ]]};
 
		{tag="more"};
 
		{"Тут еще что-то взорвалось", [[
 
			"Я знаю. Поторопитесь. Если взорвется еще один котел, то станция обречена".
 
		]], code [[ atl_fta_dlg_radio.state = 2; ]]};
 
		{"Как я выберусь отсюда?", [[
 
			"На юге есть шлюз, выйдете через него".
 
		]], code [[ atl_fta_dlg_radio.state = 2; ]]};
 
		{"Тут еще что-то взорвалось", [[Райт подтверждает: "Я знаю. Поторопитесь. Если взорвется еще один котел, то станция обречена". ]], code [[ atl_fta_dlg_radio.state = 2; ]]};
 
		{"Как я выберусь отсюда?", [[Райт отвечает: "На юге есть шлюз, выйдете через него". ]], code [[ atl_fta_dlg_radio.state = 2; ]]};
 
        {tag="clear"};
 
        {"Вас понял. Конец связи. ", "", code [[ back(); ]]}
 
	};
 
};
 
 
atl_fta_dlg_phone = dlg {
 
	nam = "Телефон";
 
	entered = [[
 
		Вы снимаете трубку и слышите раздраженный голос Винсента Даркстара: "Дрейк?! Какого черта?! Немедленно возвращайтесь в свою комнату!"^ 
 
		Вы не успеваете и слова сказать, как в разговор вмешивается Майкл Райт: "Стойте! Дрейк, кроме вас там никого нет, поэтому одевайте скафандр и слушайте мои инструкции".
 
	]];
 
	phr = {
 
		{"Вас понял.", code = [[ psub("back"); ]]};
 
	};
 
};
 
 
atl_fta_solis_entry = room {
 
	nam = "Атлантида, Солис, рядом со шлюзом";
 
	dsc = [[
 
		В помещении темно и жарко. Слева и справа от вас проложены трубы. Сквозь просветы в них вы видите огонь где-то вдалеке на юго-востоке.
 
	]];
 
	entered = function(s)
 
		item_atl_fta_suit.dlg = "atl_fta_dlg_radio";
 
  
 
        if (atl_fta_solis_c2.broken_valve == 0) then
 
            atl_fta_solis_c2.broken_valve = rnd(5);
 
            atl_fta_valves[atl_fta_solis_c2.broken_valve].broken = true;
 
            atl_fta_solis_c2.broken_offset = rnd(9) + 10;
 
        end;
 
	end;
 
	way = {
 
		vroom("На восток", "atl_fta_solis_ne");
 
		vroom("На запад", "atl_fta_solis_nw");
 
	};
 
};
 
 
atl_fta_solis_ne_1 = room {
 
atl_fta_solis_ne = room {
 
	nam = "Атлантида, Солис";
 
	dsc = [[
 
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. Сквозь просветы в них вы видите огонь где-то вдалеке на юге.
 
	]];
 
	way = {
 
		vroom("На запад", "atl_fta_solis_entry");
 
		vroom("На юг", "atl_fta_solis_e");
 
	};
 
};
 
 
atl_fta_solis_e = room {
 
	nam = "Атлантида, Солис";
 
	dsc = [[
 
		Здесь очень жарко. Путь на юг прегражден обломками труб, а за ними вы видите огонь. 
 
	]];
 
	way = {
 
		vroom("На север", "atl_fta_solis_ne");
 
	};
 
};
 
 
atl_fta_solis_nw = room {
 
	nam = "Атлантида, Солис";
 
	dsc = [[
 
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. 
 
	]];
 
	way = {
 
		vroom("На восток", "atl_fta_solis_entry");
 
		vroom("На юг", "atl_fta_solis_w");
 
	};
 
};
 
 
atl_fta_solis_w = room {
 
	nam = "Атлантида, Солис";
 
	dsc = [[
 
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. 
 
	]];
 
	way = {
 
		vroom("На север", "atl_fta_solis_nw");
 
		vroom("На восток", "atl_fta_solis_c1");
 
		vroom("На юг", "atl_fta_solis_sw");
 
	};
 
};
 
 
atl_fta_solis_c1 = room {
 
	nam = "Атлантида, Солис, центр";
 
	dsc = [[
 
		В помещении темно и жарко. Перед собой вы видите сложную конструкцию из труб и клапанов. Через металлическую решетку на севере вы видите вентили, о которых говорил Райт. К сожалению, вы не сможете дотянуться до них отсюда.
 
	]];
 
	way = {
 
		vroom("На запад", "atl_fta_solis_w");
 
	};
 
};
 
 
atl_fta_solis_sw = room {
 
	var {
 
		state = 0;
 
	};
 
	nam = "Атлантида, Солис";
 
	dsc = [[
 
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. 
 
	]];
 
	entered = function(s)
 
		if (s.state == 0) then
 
			s.state = 1;
 
			item_atl_fta_suit.dlg = nil;
 
			pr([[
 
				Позади вас раздается еще один взрыв. Вы с трудом удерживаетесь на ногах, видите, что часть секции на севере завалена и сквозь дым, пар и пыль видите начавшийся пожар.
 
			]]);
 
		end;
 
	end;
 
	way = {
 
		vroom("На восток", "atl_fta_solis_exit");
 
	};
 
};
 
 
atl_fta_solis_exit = room {
 
	nam = "Атлантида, Солис";
 
	dsc = [[
 
		В помещении темно и жарко. Cо всех сторон от вас проложено множество труб. 
 
	]];
 
	way = {
 
		vroom("На север", "atl_fta_solis_c2");
 
		vroom("На запад", "atl_fta_solis_sw");
 
		vroom("На восток", "atl_fta_solis_se");
 
		kh_vroom("В шлюз", function(s)
 
			if atl_fta_solis_c2:solved() then
 
				return "atl_fta_ending";
 
			else
 
				return "atl_fta_game_over_left_2";
 
			end;
 
		end);
 
	};
 
};
 
 
atl_fta_solis_c2 = room {
 
	var {
 
		valve_a = 2;
 
		valve_b = 90;
 
		broken_valve = 0;
 
		broken_offset = 0;
 
		valves = {1,1,1,1,1};
 
	};
 
	solved = function(s)
 
		for i =1, #s.valves do
 
			if (s.valves[i] == 0 and i ~= s.broken_valve or 
 
				s.valves[i] == 1 and i == s.broken_valve) then
 
				return false;
 
			end;
 
		end;
 
		
 
		return true;
 
	end;
 
	nam = "Атлантида, Солис, Центр";
 
	dsc = function(s)
 
		if (not s:solved()) then
 
			return [[
 
				В помещении темно и жарко. Где-то рядом вы слышите шипение пара, вырывающегося из труб, но не видите, где. Перед собой вы видите сложную конструкцию из труб и клапанов. Вы видите несколько пронумерованных вентилей, рядом с которыми расположены манометры:
 
			]];
 
		else
 
			return [[
 
				В помещении темно и жарко. Перед собой вы видите сложную конструкцию из труб и клапанов. Вы видите несколько пронумерованных вентилей, рядом с которыми расположены манометры:
 
			]];
 
		end;
 
	end;
 
	entered = function(s)
 
		if (s.broken_valve == 0) then
 
			s.broken_valve = rnd(5);
 
			s.broken_offset = rnd(9) + 10;
 
		end;
 
	end;
 
	way = {
 
		vroom("На юг", atl_fta_solis_exit);
 
	};
 
	obj = {
 
		"atl_fta_solis_valve1",
 
		"atl_fta_solis_valve2",
 
		"atl_fta_solis_valve3",
 
		"atl_fta_solis_valve4",
 
		"atl_fta_solis_valve5",
 
		"atl_fta_solis_valvea",
 
		"atl_fta_solis_valveb",
 
		"item_goldmans_clock"
 
	};
 
};
 
 
atl_fta_solis_valvea = obj {
 
	nam = "Вентиль";
 
	dsc = "Под ними расположены еще два вентиля. Тот, что {слева} отмечен буквой A,";
 
	act = function(s)
 
		if (atl_fta_solis_c2.valve_a == 2) then
 
			atl_fta_solis_c2.valve_a = 3;
 
		elseif (atl_fta_solis_c2.valve_a == 3) then
 
			atl_fta_solis_c2.valve_a = 4;
 
		elseif (atl_fta_solis_c2.valve_a == 4) then
 
			atl_fta_solis_c2.valve_a = 6;
 
		elseif (atl_fta_solis_c2.valve_a == 6) then
 
			atl_fta_solis_c2.valve_a = 2;
 
		end;
 
	end;
 
};
 
 
atl_fta_solis_valveb = obj {
 
	nam = "Вентиль";
 
	dsc = " а тот, что {справа} -- буквой B.";
 
	act = function(s)
 
		if (atl_fta_solis_c2.valve_b == 90) then
 
			atl_fta_solis_c2.valve_b = 60;
 
		elseif (atl_fta_solis_c2.valve_b == 60) then
 
			atl_fta_solis_c2.valve_b = 45;
 
		elseif (atl_fta_solis_c2.valve_b == 45) then
 
			atl_fta_solis_c2.valve_b = 30;
 
		elseif (atl_fta_solis_c2.valve_b == 30) then
 
			atl_fta_solis_c2.valve_b = 90;
 
		end;
 
	end;
 
};
 
 
atl_fta_solis_valve = function(index)
 
	return obj {
 
		nam = "Вентиль";
 
		dsc = function(s)
 
			local value = atl_fta_solis_c2.valve_a * index + math.floor(atl_fta_solis_c2.valve_b / index);
 
			if (atl_fta_solis_c2.broken_valve == index) then
 
				value = value + atl_fta_solis_c2.broken_offset;
 
			end;
 
			if (atl_fta_solis_c2.valves[index] == 0) then
 
				value = 0;
 
			end;
 
			return "{Вентиль №"..tostring(index).."}. Манометр показывает " .. tostring(value) .. "^";
 
		end;
 
		act = function(s)
 
			if (atl_fta_solis_c2.valves[index] == 0) then
 
				atl_fta_solis_c2.valves[index] = 1;
 
			else
 
				atl_fta_solis_c2.valves[index] = 0;
 
			end;
 
			
 
			if (atl_fta_solis_c2:solved()) then
 
				return "Шипение пара прекращается. Вы сделали все, что нужно. ";
 
			else
 
				return false;
 
			end;
 
		end;
 
	};
 
end;
 
 
atl_fta_solis_valve1 = atl_fta_solis_valve(1);
 
atl_fta_solis_valve2 = atl_fta_solis_valve(2);
 
atl_fta_solis_valve3 = atl_fta_solis_valve(3);
 
atl_fta_solis_valve4 = atl_fta_solis_valve(4);
 
atl_fta_solis_valve5 = atl_fta_solis_valve(5);
 
 
atl_fta_valves = {
 
    atl_fta_solis_valve1;
 
    atl_fta_solis_valve2;
 
    atl_fta_solis_valve3;
 
    atl_fta_solis_valve4;
 
    atl_fta_solis_valve5;
 
};
 
 
atl_fta_game_over_left = room {
 
	nam = "Игра окончена";
 
	dsc = [[
 
		Как только вы выходите из межсекционного коридора, раздается еще один взрыв и свет на станции гаснет. Взрыв повреждает межсекционный коридор и его начинает заполнять вода. Вы начинаете задраивать люк, но третий взрыв сбивает вас с ног. Вы падаете и теряете сознание. Через несколько мгновений вы утонете, но вас это уже не заботит. 
 
	]];
 
};
 
 
atl_fta_game_over_left_2 = room {
 
	nam = "Игра окончена";
 
	dsc = [[
 
		Как только вы входите в шлюз, взрыв сокрушительной силы сотрясает станцию. Шлюзовую дверь выбивает и вас отбрасывает в противоположный угол комнаты. Вы видите, как секцию начинает заполнять вода. По радио не слышно ничего кроме помех и скорее всего никто не придет к вам на помощь...
 
	]];
 
};
 
 
atl_fta_ending = room {
 
	nam = "Атлантида";
 
	dsc = [[
 
		Через шлюз вы выбираетесь из Солиса и оказываетесь снаружи. Через некоторое время вас подбирает Наутилус, чтобы вернуть на станцию. От экипажа вы узнаете, что потребление энергии на станции сокращено до восстановления Солиса. ^
 
		Вернувшись на станцию, вы сразу же отправляетесь в свою каюту, чтобы отдохнуть. 
 
	]];
 
	entered = function(s)
 
		atl_fta_state = 2;
 
		remove(item_atl_fta_suit);
 
	end;
 
	obj = {
 
		vway('continue', '{Продолжить}', 'atl_luna_drake_room');
 
	};
 
};
 
\ No newline at end of file
utils.lua
Show inline comments
 
@@ -678,219 +678,219 @@ end;
 
    dsc = "{Стереть}";
 
    act = function(s)
 
        if (here().input:len() > 0) then
 
            here().input = here().input:sub(1, here().input:len() - 1);
 
        end;
 
        return "";
 
    end;
 
};
 
 
_kh_cancel = obj {
 
    nam = "_kh_cancel";
 
    dsc = "{Отмена}";
 
    act = function(s)
 
        back();
 
        return "";
 
    end;
 
};
 
 
_kh_enter = obj {
 
    nam = "_kh_enter";
 
    dsc = "{Ввод}";
 
    act = function(s)
 
        if (here().input) then
 
            here():check(here().input);
 
        end;
 
        return "";
 
    end;
 
};
 
 
 
--[[
 
	Создает obj, который добавляет другой obj на сцену при активации и становится неинтерактивным
 
	nam - имя объекта
 
	dsc_a - описание до активации
 
	dsc_b - описание после активации
 
	act_a - описание взаимодействия до активации
 
	act_b - описание взаимодействия после активации
 
	o2 - obj, добавляемый на сцену
 
	r - удаляет объект после активации
 
]]
 
function obscured_obj(nam, dsc_a, act_a, o2, r, dsc_b, act_b)
 
	return obj {
 
		var {
 
			activated = false;
 
		};
 
		nam = nam;
 
		dsc = function(s)
 
			if (s.activated) then
 
				return dsc_b;
 
			else 
 
				return dsc_a;
 
			end;
 
		end;
 
		act = function(s)
 
			if (s.activated) then
 
				return act_b;
 
			else
 
				s.activated = true;
 
				put(o2, here());
 
				if (r) then
 
					remove(r, here());
 
				end;
 
				return act_a;
 
			end;
 
		end;
 
	};
 
end;
 
 
_atlantis_coder = input_alphabet_nav {
 
    nam = "Кодировщик";
 
    maxlen = 32;
 
    label = "Сообщение:";
 
    check = function(s, input)
 
        if type(_atlantis_suit_menu._here.checkCoder) == "function" then
 
            pn(_atlantis_suit_menu._here:checkCoder(input));
 
        else
 
            pn [[Лампочки кодировщика зажигаются в заданной последовательности, но ничего не происходит. ]];
 
        end;
 
        back();
 
    end;
 
};
 
 
_atlantis_suit_menu = dlg {
 
	nam = "Скафандр";
 
	_item = nil;
 
	dsc = [[
 
		Что вы хотите сделать?
 
	]];
 
    entered = function(s)
 
        if (s._item.has_coder) then
 
            pon(3);
 
        else
 
            poff(3);
 
        end;
 
    end;   
 
	phr = {
 
		{1, always = "true", "Использовать рацию", function(s)
 
			local val = EngineUtils.getValue(_atlantis.suit_menu._item.dlg, _atlantis.suit_menu._item);
 
		{1, always = "true", "[Использовать рацию]", function(s)
 
			local val = EngineUtils.getValue(_atlantis_suit_menu._item.dlg, _atlantis_suit_menu._item);
 
			if (val) then
 
				walkin(val);
 
				stead.ref(val).__from__ = _atlantis.suit_menu.__from__;
 
				stead.ref(val).__from__ = _atlantis_suit_menu.__from__;
 
			else
 
				back();
 
				return "Никто не отвечает";
 
			end;
 
		end};
 
        {2, always = "true", function(s)
 
            if (pl.has_light) then
 
                return "Выключить фонарь";
 
                return "[Выключить фонарь]";
 
            else
 
                return "Включить фонарь";
 
                return "[Включить фонарь]";
 
            end;
 
        end, function(s)
 
            if (pl.has_light) then
 
                pl.has_light = false;
 
                return "Вы выключаете фонарь. ";
 
            else
 
                pl.has_light = true;
 
                return "Вы включаете фонарь. ";
 
            end;
 
        end};
 
        {3, always = "true", "Использовать кодировщик", code [[ walkin("_atlantis_coder"); ]]};
 
		{4, always = "true", "Снять скафандр", function(s)
 
        {3, always = "true", "[Использовать кодировщик]", code [[ walkin("_atlantis_coder"); ]]};
 
		{4, always = "true", "[Снять скафандр]", function(s)
 
			if (EngineUtils.getValue(_atlantis_suit_menu._item.cantakeoff, _atlantis_suit_menu._item)) then
 
				drop(_atlantis._uit_menu._item);
 
				back();
 
				return "Вы снимаете скафандр";
 
			else
 
				back();
 
				return "Вы не можете снять скафандр сейчас";
 
			end;
 
		end};
 
		{5, always = "true", "Отмена", function(s)
 
			back();
 
			return "";
 
		end};
 
	};
 
};
 
 
_atlantis = {
 
	suit_inv = function(s)
 
		_atlantis_suit_menu._item = s;
 
        _atlantis_suit_menu._here = here();
 
		walkin(_atlantis_suit_menu);
 
	end;
 
};
 
 
suit = function(tab)
 
	if (not tab.inv) then
 
		tab.inv = _atlantis.suit_inv;
 
	end;
 
	
 
	return obj(tab);
 
end;
 
 
labyrinth = function(tab)
 
    local enter = tab.enter;
 
    local exit = tab.exit;
 
    local dsc = tab.dsc;
 
    local lab;
 
    tab.enter = function(s)
 
        path('e1'):disable();
 
        path('e2'):disable();
 
        path('e3'):disable();
 
        path('e4'):disable();
 
        path('ex'):disable();
 
        
 
        local e1open = s.map[s.position].e1 and not EngineUtils.getValue(s.map[s.position].e1lock, s);
 
        local e2open = s.map[s.position].e2 and not EngineUtils.getValue(s.map[s.position].e2lock, s);
 
        local e3open = s.map[s.position].e3 and not EngineUtils.getValue(s.map[s.position].e3lock, s);
 
        local e4open = s.map[s.position].e4 and not EngineUtils.getValue(s.map[s.position].e4lock, s);
 
        local exopen = s.map[s.position].ex and not EngineUtils.getValue(s.map[s.position].exlock, s);
 
        
 
        if (e1open) then
 
            path('e1'):enable();
 
        end;
 
        if (e2open) then
 
            path('e2'):enable();
 
        end;
 
        if (e3open) then
 
            path('e3'):enable();
 
        end;
 
        if (e4open) then
 
            path('e4'):enable();
 
        end;
 
        if (exopen) then
 
            path('ex'):enable();
 
        end;
 
        if (type(enter) == 'function') then
 
            enter(s);
 
        end;
 
        if (type(s.map[s.position].enter) == 'function') then
 
            s.map[s.position].enter(s);
 
        end;
 
    end;
 
    tab.exit = function(s)
 
        if (type(exit) == 'function') then
 
            exit(s);
 
        end;
 
        if (type(s.map[s.position].exit) == 'function') then
 
            s.map[s.position].exit(s);
 
        end;
 
    end;
 
    tab.dsc = function(s)
 
        if (type(dsc) == "function") then
 
            return dsc(s);
 
        elseif dsc == nil then
 
            return s.map[s.position].name;
 
        else
 
            return dsc .. s.map[s.position].name;
 
        end;
 
    end;
 
    tab.way = {
 
        kh_vroom(tab.dir1, function()
 
            lab.oldposition = lab.position;
 
            lab.position = lab.map[lab.position].e1;
 
            return lab;
 
        end, "e1");
 
        kh_vroom(tab.dir2, function()
0 comments (0 inline, 0 general)