atl_fta_leave = 2; atl_fta_enter = 2; atl_fta_leave_2 = 2; atl_fta_is_terra_solis = room { var { state = 0; }; nam = "Атлантида, межсекционный кодидор"; dsc = [[Небольшой коридор, соединяющий секции Терра и Солис. Яркий свет электрических ламп освещает помещение. ]]; entered = function(s) make_snapshot(); if (s.state == 0) then return [[ Вы входите в межсекционный коридор Солиса и в этот момент станцию сотрясает взрыв. Свет на мгновение моргает. Раздается звонок телефона. ]]; end; end; way = { kh_vroom("В секцию Терра", function(s) if atl_fta_leave == 0 then return "atl_fta_game_over_left"; else if atl_fta_leave == 1 then pr [[Вы хотите просто уйти, словно ничего не случилось? ]]; elseif atl_fta_leave == 2 then pr [[Вы уверены, что хотите просто взять и уйти? ]]; end; atl_fta_leave = atl_fta_leave - 1; return false; end; end); kh_vroom("В секцию Солис", function(s) if (atl_fta_phone.state == 1 and have(item_atl_fta_suit)) then return "atl_fta_solis_entry"; else if atl_fta_enter == 0 then return "atl_fta_game_over_entered"; else if atl_fta_enter == 1 then pr [["Вряд ли там сейчас безопасно находиться". ]]; elseif atl_fta_enter == 2 then pr [["Там только что что-то взорвалось, я бы надел скафандр". ]]; end; atl_fta_enter = atl_fta_enter - 1; return false; end; end; end); }; obj = { "atl_fta_phone", "item_atl_fta_suit" }; }; item_atl_fta_suit = suit { var { dlg = false; }; 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 = "Радио"; enter = function(s) if (s.state == 0) then psub("tuning"); return [[Радио не настроено. ]]; elseif (s.state == 1) then psub("ok"); return [[Радио настроено, вы можете говорить. ]]; elseif (s.state == 2) then psub("next"); return [[Радио настроено, вы можете говорить. ]]; elseif (s.state == 3) then psub("more"); return [[Радио настроено, вы можете говорить. ]]; elseif (s.state == 4) then psub("done"); 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 [[ psub("clear"); ]]}; {tag="next"}; {always=true, "Что мне делать?", [[Райт инструктирует вас: "Идите по западной стороне. Ваша задача -- попасть в центр секции с южной стороны. Вы увидите несколько вентилей. Вам нужно будет скорректировать давление в системе. Инструкцию найдете на месте. Если давление в каких-то трубах будет завышено -- отключите только их". ]], code [[ psub("clear"); ]]}; {always=true, "Конец связи. ", function(s) stead.need_scene(); back(); return false; end}; {tag="more", empty=function(s) stead.need_scene(); back(); return false; end}; {"Тут еще что-то взорвалось.", [[Райт подтверждает: "Я знаю. Поторопитесь. Если взорвется еще один котел, то станция обречена". ]], code [[ atl_fta_dlg_radio.state = 2; ]]}; {"Как я выберусь отсюда?", [[Райт отвечает: "На юге есть шлюз, выйдете через него". ]], code [[ atl_fta_dlg_radio.state = 2; ]]}; {tag="clear"}; {"Вас понял. Конец связи.", function(s) stead.need_scene(); back(); return false; end}; {tag='done'}; {always=true, 'Я все сделал.', [[Райт подтверждает: "Вижу. Отлично! Температуры и давление приходят в норму. Выходите оттуда. Шлюз на юге. Конец связи". ]], function(s) stead.need_scene(); back(); return false; end}; }; }; 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(26) + 24; end; end; way = { vroom("На восток", "atl_fta_solis_ne"); vroom("На запад", "atl_fta_solis_nw"); }; }; 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_cs"); }; }; atl_fta_solis_c1 = room { nam = "Атлантида, Солис, центр"; dsc = [[ В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Перед собой вы видите сложную конструкцию из труб и клапанов. Через металлическую решетку на севере вы видите вентили, о которых говорил Райт. К сожалению, вы не сможете дотянуться до них отсюда. ]]; way = { vroom("На запад", "atl_fta_solis_w"); }; }; atl_fta_solis_sw_cs = cutscene('Атлантида, Солис', 'Атлантида, Солис', [[Позади вас раздается еще один взрыв. Вы с трудом удерживаетесь на ногах, видите, что часть секции на севере завалена и сквозь дым, пар и пыль видите начавшийся пожар. ]], 'atl_fta_solis_sw', function(s) atl_fta_dlg_radio.state = 3; end); atl_fta_solis_sw = room { nam = "Атлантида, Солис"; dsc = [[ В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Cо всех сторон от вас проложено множество труб. ]]; way = { vroom("На восток", "atl_fta_solis_exit"); }; }; atl_fta_solis_se = room { nam = "Атлантида, Солис"; dsc = [[В помещении темно и жарко, несмотря на одетый на вас скафандр. Воздух заполнен дымом и пылью, еще больше ухудшая видимость. Cо всех сторон от вас проложено множество труб. Проход на север завален обломками, а за ними пылает огонь. ]]; 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 if atl_fta_leave_2 == 0 then return "atl_fta_game_over_left_2"; else if atl_fta_leave_2 == 1 then pr [["Кроме меня поблизости никого нет, так что мне придется это сделать". ]]; else pr [["Здесь вот-вот все взорвется, если я не исправлю проблему". ]]; end; atl_fta_leave_2 = atl_fta_leave_2 - 1; return false; end; end; end); }; }; atl_fta_solis_c2 = room { var { valve_a = 2; valve_b = 1200; broken_valve = 0; broken_offset = 0; valves = {1,1,1,1,1}; }; solved = function(s) local count = 0; 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; count = count + s.valves[i]; end; local value; if count > 0 then value = math.floor(atl_fta_solis_c2.valve_b / atl_fta_solis_c2.valve_a * 5 / count); else value = 9000; end; if value > 255 or value < 245 then return false; end; return true; end; nam = "Атлантида, Солис, Центр"; dsc = function(s) if (not s:solved()) then return [[ В помещении темно и жарко. Где-то рядом вы слышите шипение пара, вырывающегося из труб, но не видите, где. Перед собой вы видите сложную конструкцию из труб и клапанов. Вы видите несколько пронумерованных вентилей, рядом с которыми расположены манометры: ]]; else return [[ В помещении темно и жарко. Перед собой вы видите сложную конструкцию из труб и клапанов. Вы видите несколько пронумерованных вентилей, рядом с которыми расположены манометры: ]]; 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", "atl_fta_help_text", "item_goldmans_clock" }; }; atl_fta_help_text = obj { nam = "atl_fta_help_text"; dsc = "Над вентилями расположена латунная {табличка} с инструкцией. "; act = [[Табличка гласит: "Используйте вентили "A" и "B" для регулировки давления. Вентили 1-5 нужны для перекрытия подачи пара в отдельные трубы. Для оптимальной работы давление в трубе должно быть в диапазоне 245-255КПа. ^Внимание: Не перекрывайте вентили без необходимости -- это снижает производительность!". ]]; } atl_fta_solis_valvea = obj { nam = "Вентиль"; dsc = function(s) return 'Под ними расположены еще два вентиля. На каждом из них нанесены числовые обозначения, а над вентилями нанесена краской небольшая стрелочка. ^{Вентиль "A"} установлен в значение ' .. tostring(atl_fta_solis_c2.valve_a) .. ".^"; end; act = function(s) if (atl_fta_solis_c2:solved()) then return "Вы уже сделали все, что нужно. Не стоит больше ничего здесь трогать. "; end; 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; if (atl_fta_solis_c2:solved()) then atl_fta_dlg_radio.state = 4; return "Шипение пара прекращается. Вы сделали все, что нужно. "; else return "Вы поворачиваете вентиль. Значения на манометрах изменились. "; end; end; }; atl_fta_solis_valveb = obj { nam = "Вентиль"; dsc = function(s) return '{Вентиль "B"} установлен в значение ' .. tostring(atl_fta_solis_c2.valve_b) .. ".^"; end; act = function(s) if (atl_fta_solis_c2:solved()) then return "Вы уже сделали все, что нужно. Не стоит больше ничего здесь трогать. "; end; atl_fta_solis_c2.valve_b = atl_fta_solis_c2.valve_b + 200; if atl_fta_solis_c2.valve_b > 1200 then atl_fta_solis_c2.valve_b = 600; end; if (atl_fta_solis_c2:solved()) then return "Шипение пара прекращается. Вы сделали все, что нужно. "; else return "Вы поворачиваете вентиль. Значения на манометрах изменились. "; end; end; }; atl_fta_solis_valve = function(index) local delta = rnd(11) - 6; return obj { nam = "Вентиль"; delta = delta; dsc = function(s) local count = 0; for valve = 1, #atl_fta_solis_c2.valves do count = count + atl_fta_solis_c2.valves[valve]; end; local value; if count > 0 then value = math.floor(atl_fta_solis_c2.valve_b / atl_fta_solis_c2.valve_a * 5 / count) + s.delta; else value = 9000; end; 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:solved()) then return "Вы уже сделали все, что нужно. Не стоит больше ничего здесь трогать. "; end; 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 "Вы поворачиваете вентиль. Значения на манометрах изменились. "; 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_entered = game_over('atl_fta_game_over_entered', [[Вы открываете шлюз в Солис. В помещение врываются клубы удушающего дыма и нестерпимый жар. Вы начинаете кашлять, а голова начинает кружиться от жара. Это последнее, что вы успели запомнить. ]]); atl_fta_game_over_left = game_over('atl_fta_game_over_left', [[Как только вы выходите из межсекционного коридора, раздается еще один взрыв и свет на станции гаснет. Взрыв повреждает межсекционный коридор и его начинает заполнять вода. Вы начинаете задраивать люк, но третий взрыв сбивает вас с ног. Вы падаете и теряете сознание. Через несколько мгновений вы утонете, но вас это уже не заботит. ]]); atl_fta_game_over_left_2 = game_over('atl_fta_game_over_left_2', [[Как только вы входите в шлюз, взрыв сокрушительной силы сотрясает станцию. Шлюзовую дверь выбивает и вас отбрасывает в противоположный угол комнаты. Вы видите, как секцию начинает заполнять вода. По радио не слышно ничего кроме помех и скорее всего никто не придет к вам на помощь... ]]); atl_fta_ending = cutscene('atl_fta_ending', "Атлантида", [[Через шлюз вы выбираетесь из Солиса и оказываетесь снаружи. Через некоторое время вас подбирает Наутилус, чтобы вернуть на станцию. От экипажа вы узнаете, что потребление энергии на станции сокращено до восстановления Солиса. ^По возвращении на станцию, вас встречают охранники. Они проводят вас в вашу каюту, где вы погружаетесь в глубокий сон. Вы просыпаетесь от стука в дверь. Охранники просят вас следовать за ними. Они сопровождают вас до кабинета Винсента Даркстара. ]], 'atl_mtr_intro', function(s) if char_darkstar_dlg.state == 0 then char_darkstar_dlg.state = 1; end; atl_fta_state = 2; remove(item_atl_fta_suit, pl); me().has_light = false; end);