atl_fta_is_terra_solis = room { nam = "Атлантида, межсекционный кодидор"; 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 [[ Радио не настроено ]]; elseif (s.state == 1) then psub("ok"); return [[ Радио настроено, вы можете говорить ]]; elseif (s.state == 2) then psub("next"); return [[ Радио настроено, вы можете говорить ]]; elseif (s.state == 3) then psub("more"); 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(); ]]}; {tag="next"}; {"Что мне делать?", [[ "Идите по западной стороне. Ваша задача - попасть в центр секции, с северной стороны. Вы увидите несколько вентилей. Вам надо будет перекрыть их все. Там хитрая защита от случайного закрытия, но я думаю, вы справитесь". ]]}; {tag="more"}; {"Тут еще что-то взорвалось", [[ "Я знаю. Поторопитесь. Если взорвется еще один котел, то станция обречена". ]], code [[ atl_fta_dlg_radio.state = 2; ]]}; {"Как я выберусь отсюда?", [[ "На юге есть шлюз, выйдете через него". ]], code [[ atl_fta_dlg_radio.state = 2; ]]}; }; }; 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"; end; way = { vroom("На восток", "atl_fta_solis_ne"); vroom("На запад", "atl_fta_solis_nw"); }; }; atl_fta_solis_ne_1 = 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_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'); }; };