--[[ Ваша подводная лодка - Левиафан Для начала вам придется починить ее Имеет электрический двигатель Для запуска машины потребуется его починить и обеспечить энергией Левиафан - достаточно большая подводная лодка. Хотя она может управляться одним человеком, рассчитана она на много большее. Имеется три доступных уровня освещения: Не освещено - ничего не видно, передвигаться по кораблю невозможно Плохо освещено - Описания минимальны, большинство действий недоступно Хорошо освещено - полные описания, все действия доступны Можно включить или выключить внешнее освещение Скафандры придется зарабатывать на Атлантиде ]] -- TODO персонажи не должны обсуждать личные темы по телефону, только при встрече submarine_leviathan = obj { var { hull_integrity = 100; -- Целостность корпуса electric_integrity = 100; -- Целостность электросистем torpedoes = 2; -- Количество заряженных торпед battery = false; -- Состояние батареи circuit_breaks = 2; -- Разрывы цепи power_on = false; -- включена ли энергия air_level = 0; -- запас воздуха. Максимум - 5 дней(5 * 24 * 60 * 60 = 432000) airpump = false; refit = false; }; nam = "submarine_leviathan"; disp = "Левиафан"; dsc = function(s) --[[ atl_aqua_leviathan_dock iyh_far_from_entrance_foot ctt_iraa_city ctt_iraa_near_temple ctt_dyp_city ctt_dyp_temple_entrance ]] if where(submarine_leviathan) == atl_aqua_leviathan_dock then return [[В воде дока покоится {Левиафан}. Огромная субмарина занимает почти значительную часть пространство дока, строившегося для гораздо меньших кораблей. ]]; elseif where(submarine_leviathan) == dyp_center then return [[{Левиафан} неподвижно застыл над площадью рядом с обелиском. ]]; elseif where(submarine_leviathan) == dyp_temple_entrance then return [[{Левиафан} неподвижно застыл на некотором отдалении от входа в храм. ]]; elseif where(submarine_leviathan) == dyp_temple_east then return [[{Левиафан} неподвижно застыл у входа в пещеру, освещая ее мощным лучом прожектора. ]]; elseif where(submarine_leviathan) == dyp_temple_north_west or where(submarine_leviathan) == dyp_temple_warning then return [[{Левиафан} неподвижно застыл на некотором отдалении от обелиска. ]]; elseif where(submarine_leviathan) == dyp_night_south then return [[Темная громада {Левиафана} неподвижно застыла неподалеку от вас. Без освещения субмарина выглядит совершенно безжизненной, и заметить ее в темноте не так-то просто. ]]; elseif where(submarine_leviathan) == iraa_temple_entrance then if me() == player_learr then return [[Машина хевьяров, напоминающая {железную рыбу}, из многочисленных глаз которой изливается яркий желтоватый свет, застыла неподалеку от входа в храм.]]; else return [[{Левиафан} неподвижно застыл на некотором отдалении от входа в храм. ]]; end; elseif where(submarine_leviathan) == iyh_rear_entrance_foot then return [[{Левиафан} покоится в ущелье, едва не касаясь его стен. Яркий луч прожектора субмарины освещает проход. ]]; elseif where(submarine_leviathan) == iyh_near_temple_foot then if atl_iyh_entrance_destroyed then return [[{Левиафан} неподвижно застыл на некотором отдалении от скалы. Свет от прожекторов субмарины освещает раздробленные взрывом груды камней. ]]; else return [[{Левиафан} неподвижно застыл на некотором отдалении от входа в храм. Свет от прожекторов субмарины падает на древние барельефы, высеченные в скале. ]]; end; elseif where(submarine_leviathan) == nley_near_cliff_1 then return [[{Левиафан} неподвижно застыл на некотором отдалении от вас. В этом ущелье практически негде укрыть корабль от патрулей навьяров, снующих повсюду. Остается лишь надеяться, что на таком расстоянии от города, они не будут вам мешать. ]]; elseif where(submarine_leviathan) == ven_center then return [[{Левиафан} неподвижно застыл над площадью рядом с обелиском, приковывая внимание местных жителей. ]]; elseif where(submarine_leviathan) == ven_ravine_intro then return [[{Левиафан} неподвижно застыл в той части ущелья, где он еще может свободно маневрировать не опасаясть скал. ]]; elseif where(submarine_leviathan) == ven_temple_entrance then return [[{Левиафан} неподвижно застыл на некотором отдалении от входа в храм. ]]; else return [[{Левиафан} неподвижно застыл на некотором отдалении от вас. ]]; end; end; act = function(s) if me() == player_learr then return [[Эта машина способна преодолевать за день расстояния, которые навьяр не пройдет и за несколько недель. Удивительно, как хевьяры смогли создать подобное. ]]; else return [[Несмотря на проведенные в бездействии годы, субмарина сейчас в отличном состоянии. Из иллюминаторов льется яркий свет. На борту виднеется слегка пошарпанная, но читаемая надпись "А04 -- Левиафан". ]]; end; end; }; leviathan_airlock = darkroom { nam = "leviathan_airlock"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, шлюз"; leviathan = true; dsc_lit = "Шлюзовой отсек Левиафана представляет собой небольшую круглую камеру, около двух метров в диаметре. Отсек освещен ярким светом электрических ламп, смонтированных на стенах. "; dsc_halflit = "Шлюзовой отсек Левиафана представляет собой небольшую круглую камеру, около двух метров в диаметре. В свете лампы вы различаете предметы окружения. На стенах смонтированы электрические лампы, однако они сейчас не горят. "; dsc_dark = "Шлюзовой отсек Левиафана представляет собой небольшую круглую камеру, около двух метров в диаметре. Сейчас здесь темно и вы почти ничего не видите. "; enter = function(s) if item_lse_map.state == 5 and not lseryanotrr_found then lseryanotrr_found = true; walkin('lseryanotrr_found_cutscene'); end; end; way = { kh_vroom("В кают-компанию", function(s) if (have(item_suit)) then remove(item_suit, pl); me().has_light = false; end; return "leviathan_wardroom"; end, 1); kh_vroom("В люк", function() local val = EngineUtils.getValue(where(submarine_leviathan).no_exit); if (val) then pr(val); return false; else if (where(submarine_leviathan).underwater) then if have(item_toolbox) then pr [[Вы оставляете бесполезный под водой ящик с инструментами на Левиафане. ]]; remove(item_toolbox, pl); put(item_toolbox, leviathan_airlock); end; put(item_suit, pl); elseif (have(item_suit)) then remove(item_suit, pl); me().has_light = false; end; return where(submarine_leviathan); end; end, 2); }; obj = { "leviathan_suits", "leviathan_trapdoor" }; }; leviathan_suits = obj { nam = "leviathan_suits"; dsc = "У стены стоят два {водолазных костюма}. "; act = "Костюмы для глубоководного погружения. "; }; leviathan_trapdoor = obj { nam = "leviathan_trapdoor"; dsc = "На потолке расположен люк, ведущий наружу субмарины. "; }; leviathan_captains_cabin = darkroom { has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; nam = "leviathan_captains_cabin"; disp = "Левиафан, каюта капитана"; entered = function(s) if submarine_leviathan.refit then lev_capn_map:enable(); else lev_capn_map:disable(); end; end; leviathan = true; dsc_lit = [[Каюта капитана несколько больше остальных. Под потолком расположена элетрическая лампа, излучающая яркий свет. ]]; dsc_halflit = [[Вы находитесь в каюте, очевидно, предназначенной для капитана. Под потолком расположена элетрическая лампа, однако сейчас она не горит. Эта каюта немного больше остальных. В слабом свете лампы вы с трудом различаете очертания дверей и предметов. ]]; dsc_dark = [[Вы находитесь в одной из кают. В темноте вы не можете ничего различить. ]]; way = { kh_vroom("В коридор", "leviathan_corridor", 1); }; obj = { "phone_cabin"; "lev_capn_desk"; "lev_capn_map"; "lev_capn_chair"; "lev_capn_bed"; "lev_capn_view"; }; }; lev_capn_desk = obj { nam = "lev_capn_desk"; dsc = [[У стены установлен небольшой стол с несколькими {ящиками}. ]]; act = "Ящики пусты. "; }; lev_capn_map = obj { nam = "lev_capn_map"; dsc = [[Над столом висит {карта} Атлантического океана. ]]; act = function(s) walkin(lev_capn_map_see); end; }; lev_capn_map_see = room { nam = 'Левиафан, каюта капитана'; pic = function(s) if not dypatreanotrr_found then return 'images/map_begin.png'; elseif not iraaphaanotrr_found then return 'images/map_dyp.png'; elseif not venaedanotrr_found then return 'images/map_near.png'; elseif not nleyyslanotrr_found then return 'images/map_ven.png'; else if not deep_temple_found and not lseryanotrr_found then return 'images/map_nley.png'; elseif deep_temple_found and not lseryanotrr_found then return 'images/map_no_final.png'; elseif not deep_temple_found and lseryanotrr_found then return 'images/map_no_temple.png'; else return 'images/map_all.png'; end; end; end; dsc = function(s) if atlantis_found then return [[Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". На ней изображено несколько объектов, имеющих значение для компании и, в частности, Атлантида. ]]; else atlantis_found = true; return [[Карта Атлантического океана, судя по маркировке, принадлежащая компании "Вестхейвен Трансоушен". Вы внимательно осматриваете карту в поисках чего-нибудь необычного. Ваше внимание привлекает отметка "Атлантида", сделанная посреди океана. К сожалению, никаких пояснений у вас нет и единственное, что вы можете сделать это попытаться добраться до этой точки. ]]; end; end; way = { kh_vroom('Назад', 'leviathan_captains_cabin') } } lev_capn_chair = obj { nam = "lev_capn_chair"; dsc = "Рядом со столом стоит {кресло}. "; act = "Капитанское кресло. Удобное. "; }; lev_capn_bed = obj { nam = "lev_capn_bed"; dsc = "У стены напротив стола расположена {койка}. "; act = "Мне сейчас некогда спать. "; }; lev_capn_view = obj { nam = "lev_capn_view"; dsc = "Напротив входа расположен {иллюминатор}. "; act = function(s) local view = ''; if where(submarine_leviathan).view_left then if (type(where(submarine_leviathan).view_left) == "function") then view = where(submarine_leviathan):view_left(); else view = where(submarine_leviathan).view_left; end; elseif where(submarine_leviathan).view then if (type(where(submarine_leviathan).view) == "function") then view = where(submarine_leviathan):view(); else view = where(submarine_leviathan).view; end; end; return view; end; }; lev_capn_ls = obj { nam = "lev_capn_ls"; dsc = function(s) if (here().light_on) then return "У входа находится {выключатель}, Сейчас он включен. "; else return "У входа находится {выключатель}, Сейчас он выключен. "; end; end; act = function(s) pr [[Вы переключаете выключатель. ]]; if (here().light_on) then here().light_on = false; if (submarine_leviathan.power_on and submarine_leviathan.battery) then pr [[Свет гаснет. ]]; else pr [[Ничего не происходит. ]]; end; else here().light_on = true; if (submarine_leviathan.power_on and submarine_leviathan.battery) then pr [[Свет зажигается. ]]; else pr [[Ничего не происходит. ]]; end; end; end; }; leviathan_cabin_1 = darkroom { nam = "leviathan_cabin_1"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №1"; leviathan = true; dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]]; dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов. ]]; dsc_dark = [[В помещении темно и вы ничего не видите. ]]; way = { kh_vroom("В коридор", "leviathan_corridor", 1); }; obj = { 'lev_cab_table'; 'lev_cab_beds'; 'lev_cab_view'; }; }; leviathan_cabin_2 = darkroom { nam = "leviathan_cabin_2"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №2"; leviathan = true; dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]]; dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов. ]]; dsc_dark = [[В помещении темно и вы ничего не видите. ]]; way = { kh_vroom("В коридор", "leviathan_corridor", 1); }; obj = { 'lev_cab_table'; 'lev_cab_beds'; 'lev_cab_view'; }; }; leviathan_cabin_3 = darkroom { var { lock = false; }; nam = "leviathan_cabin_3"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №3"; leviathan = true; dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]]; dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов. ]]; dsc_dark = [[В помещении темно и вы ничего не видите. ]]; way = { kh_vroom("В коридор", "leviathan_corridor", 1); }; obj = { 'lev_cab_table'; 'lev_cab_beds'; 'lev_cab_view'; }; }; leviathan_cabin_4 = darkroom { nam = "leviathan_cabin_4"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №4"; leviathan = true; dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]]; dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов. ]]; dsc_dark = [[В помещении темно и вы ничего не видите. ]]; way = { kh_vroom("В коридор", "leviathan_corridor", 1); }; obj = { 'lev_cab_table'; 'lev_cab_beds'; 'lev_cab_view'; }; }; leviathan_cabin_5 = darkroom { nam = "leviathan_cabin_5"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, каюта №5"; leviathan = true; dsc_lit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, излучающая яркий свет. ]]; dsc_halflit = [[Эта каюта ничем не отличается от других, расположенных по левому борту субмарины. Под потолком расположена электрическая лампа, однако сейчас она не горит. В слабом свете лампы вы с трудом различаете очертания дверей и предметов. ]]; dsc_dark = [[В помещении темно и вы ничего не видите. ]]; way = { kh_vroom("В коридор", "leviathan_corridor", 1); }; obj = { 'lev_cab_table'; 'lev_cab_beds'; 'lev_cab_view'; 'item_ducttape'; }; }; lev_cab_table = obj { nam = "lev_cab_table"; dsc = [[У стены рядом с иллюминатором расположен небольшой {столик}. ]]; act = "Столик пуст. "; }; lev_cab_beds = obj { nam = "lev_cab_beds"; dsc = [[Напротив стола расположены две {койки} одна над другой. ]]; act = "Мне сейчас некогда спать. "; }; lev_cab_view = obj { nam = "lev_cab_view"; dsc = "Напротив входа расположен {иллюминатор}. "; act = function(s) local view = ''; if where(submarine_leviathan).view_left then if (type(where(submarine_leviathan).view_left) == "function") then view = where(submarine_leviathan):view_left(); else view = where(submarine_leviathan).view_left; end; elseif where(submarine_leviathan).view then if (type(where(submarine_leviathan).view) == "function") then view = where(submarine_leviathan):view(); else view = where(submarine_leviathan).view; end; end; return view; end; }; leviathan_corridor = darkroom { nam = "leviathan_corridor"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, коридор"; leviathan = true; dsc_lit = [[Длинный коридор со множеством дверей. По всей длине коридора на стенах расположены электрические лампы, излучающие яркий свет. ]]; dsc_halflit = [[Длинный темный коридор. В слабом свете лампы вы с трудом различаете очертания предметов и множества дверей. ]]; dsc_dark = [[Длинный темный коридор. в темноте вы почти ничего не видите. ]]; way = { kh_vroom("В кают-компанию", "leviathan_wardroom", 1); kh_vroom("В грузовой отсек", "leviathan_cargo_hold", 1); kh_vroom("В машинный отсек", "leviathan_engines", 1); kh_vroom("В каюту капитана", "leviathan_captains_cabin", 1); kh_vroom("В каюту №1", "leviathan_cabin_1", 1); kh_vroom("В каюту №2", "leviathan_cabin_2", 1); kh_vroom("В каюту №3", function(s) if not leviathan_cabin_3.lock then return "leviathan_cabin_3"; else pr [[Дверь заперта изнутри. ]]; return false; end; end, 1); kh_vroom("В каюту №4", "leviathan_cabin_4", 1); kh_vroom("В каюту №5", "leviathan_cabin_5", 1); kh_vroom("На нижнюю палубу", "leviathan_lower_deck", 1); }; obj = { 'leviathan_corridor_wiring'; }; }; leviathan_cargo_hold = darkroom { nam = "leviathan_cargo_hold"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, грузовой отсек"; leviathan = true; dsc_lit = function(s) if (submarine_leviathan.refit) then return [[Грузовой отсек Левиафана заполнен ящиками с припасами и инструментами. Яркий свет исходит из электрических ламп, установленных на потолке. ]]; else return [[Грузовой отсек Левиафана практически пуст, не считая обломков, очевидно, оставшихся здесь с момента создания субмарины. Из электрических ламп, установленных на потолке, исходит яркий свет. ]]; end; end; dsc_halflit = [[Грузовой отсек Левиафана погружен в кромешный мрак. В свете лампы вы видите, что отсек практически пуст, не считая обломков, очевидно, оставшихся здесь с момента создания субмарины. ]]; dsc_dark = [[Грузовой отсек Левиафана погружен в кромешный мрак. ]]; way = { kh_vroom("В коридор", "leviathan_corridor", 1); }; obj = { "leviathan_cargo_wiring"; }; }; leviathan_wardroom = darkroom { nam = "leviathan_wardroom"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, кают-компания"; leviathan = true; dsc_lit = [[В центре просторной кают-компании Левиафана укреплен массивный деревянный стол. Электрические лампы, укрепленные на потолке над столом и на стенах излучают яркий свет. ]]; dsc_halflit = [[В слабом свете лампы вы с трудом различаете очертания предметов. Судя по всему, вы находитесь в кают-компании. В центре установлен массивный стол, вокруг которого стоят несколько стульев. ]]; dsc_dark = [[Кают-компания погружена во мрак и вы совсем ничего не видите. ]]; way = { kh_vroom("В рубку", "leviathan_wheelhouse", 1); kh_vroom("В шлюз", "leviathan_airlock", 1); kh_vroom("В коридор", "leviathan_corridor", 1); kh_vroom("В грузовой отсек", "leviathan_cargo_hold", 1):disable(); kh_vroom("В машинный отсек", "leviathan_engines", 1):disable(); }; enter = function(s) if raybox_task_finished and stead.deref(where(item_raybox)) ~= 'leviathan_wardroom' then put(item_raybox, 'lse_leviathan_wardroom'); put(item_raybox, 'leviathan_wardroom'); walkin(ven_raybox_cutscene); end; end; obj = { "phone_wardroom"; "leviathan_wardroom_wiring"; }; }; leviathan_engines = darkroom { nam = "leviathan_engines"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, машинное отделение"; leviathan = true; dsc_lit = [[Вы стоите на небольшой металлической платформе посреди достаточно большого помещения. Вверху и внизу тянутся какие-то трубы. Слева и справа от вас расположены механизмы, приводящие субмарину в движение. Единственная лампа, расположенная над входом, дает достаточно света, чтобы можно было осмотреться. ]]; dsc_halflit = [[В слабом свете лампы вы с трудом различаете очертания предметов. Вы стоите на небольшой металлической платформе посреди достаточно большого помещения. Вверху и внизу тянутся какие-то трубы. Слева и справа от вас расположены механизмы, приводящие субмарину в движение. ]]; dsc_dark = [[Машинный отсек Левиафана погружен во мрак и вы практически ничего не видите. ]]; way = { kh_vroom("В коридор", "leviathan_corridor", 1); }; obj = { 'leviathan_battery'; 'leviathan_breaker'; 'leviathan_engineering_sensors'; 'leviathan_engineering_wiring'; }; }; leviathan_engineering_sensors = obj { nam = "leviathan_engineering_sensors"; dsc = function(s) if EngineUtils.getValue(here().has_light, here()) or EngineUtils.getValue(pl.has_light, pl) then return [[Рядом с батареей расположена {панель} со множеством лампочек. ]]; else if submarine_leviathan.battery then return [[На {панели} горит единственная лампочка, оповещающая о том, что батарея Левиафана находится в рабочем состоянии. ]]; end; end; end; act = function(s) if (submarine_leviathan.battery) then pr("На панели горят следующие лампочки: "); pr("батарея работает"); if (submarine_leviathan.power_on) then pr(", питание включено"); if (submarine_leviathan.airpump) then pr(", воздушные насосы включены"); end; if (submarine_leviathan.circuit_breaks > 0) then pr(", разорвана цепь освещения"); end; end; pr(". "); else p("На панели не горит ни одна лампочка. "); end; end; seen_level = 2; }; leviathan_battery = obj { nam = "leviathan_battery"; dsc = function(s) if (s.opened) then return [[В дальнем конце помещения расположен {блок аккумуляторных батарей}. Крышка блока открыта и вы видите, что электроды подверглись сильной коррозии за долгое время неиспользования. ]]; else return [[В дальнем конце помещения расположен {блок аккумуляторных батарей}. Крышка блока закрыта. ]]; end; end; act = function(s) if (s.opened) then s.opened = false; return [[Вы возвращаете крышку блока батарей на место. ]]; else if (not submarine_leviathan.battery) then s.opened = true; return [[Вы сдвигаете крышку блока батарей в сторону, получая доступ к ней. ]]; else return [[Незачем это трогать. ]]; end; end; end; used = function(s, o) if (o == item_electrodes and s.opened) then remove(item_electrodes, pl); submarine_leviathan.battery = true; s.opened = false; return [[Вы заменяете электроды. Теперь аккумулятор готов к работе. Вы возвращаете крышку блока батарей на место. ]]; else return false; end; end; seen_level = 1; opened = false; }; leviathan_breaker = obj { nam = "leviathan_breaker"; dsc = function(s) if EngineUtils.getValue(here().has_light, here()) or EngineUtils.getValue(pl.has_light, pl) then if (submarine_leviathan.power_on) then return [[Рядом с батареей укреплен {рубильник}. Сейчас он включен. ]]; else return [[Рядом с батареей укреплен {рубильник}. Сейчас он выключен. ]]; end; else return [[Где-то здесь должен находиться {рубильник}. ]]; end; end; act = function(s) if (submarine_leviathan.power_on) then submarine_leviathan.power_on = false; pr([[Вы выключаете рубильник. ]]); else submarine_leviathan.power_on = true; pr([[Вы включаете рубильник. ]]); if (submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0) then set_music('music/atlantis.ogg'); pr([[Повсюду зажигается яркий свет, на мгновение ослепляя вас. ]]); end; end; end; seen_level = 2; }; leviathan_lower_deck = darkroom { nam = "leviathan_lower_deck"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, нижняя палуба"; leviathan = true; dsc_lit = function(s) if (submarine_leviathan.refit) then return [[Большой отсек на нижней палубе Левиафана освещен электрическими лампами, укрепленными на стенах. В передней части помещения вы видите несколько отверстий для зарядки торпедных аппаратов. Рядом с ними закреплены ящики, заполненные боеприпасами. ]]; else return [[Большой отсек на нижней палубе Левиафана освещен электрическими лампами, укрепленными на стенах. Повсюду раскиданы неизвестно откуда взявшиеся обломки металла. В передней части помещения вы видите несколько отверстий для зарядки торпедных аппаратов. ]]; end; end; dsc_halflit = [[Большой отсек на нижней палубе Левиафана слабо освещен вашей лампой. Повсюду раскиданы неизвестно откуда взявшиеся обломки металла. В передней части помещения вы видите несколько отверстий для зарядки торпедных аппаратов. ]]; dsc_dark = [[На нижней палубе Левиафана темно и вы совсем ничего не видите. ]]; way = { kh_vroom("В коридор", "leviathan_corridor", 1); kh_vroom("К системе жизнеобеспечения", "leviathan_life_support", 1); }; obj = { "leviathan_lower_wiring"; }; }; leviathan_life_support = darkroom { nam = "leviathan_life_support"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, система жизнеобеспечения"; leviathan = true; dsc_lit = [[Электрическая лампа освещает важнейший отсек корабля. Здесь расположено все необходимое для обеспечения команды воздухом для дыхания в течение нескольких месяцев. ]]; dsc_halflit = [[Слабый свет лампы освещает важнейший отсек корабля. Здесь расположено все необходимое для обеспечения команды воздухом для дыхания в течение нескольких месяцев. ]]; dsc_dark = [[Отсек погружен во мрак и вы не видите совсем ничего. ]]; way = { kh_vroom("Назад", "leviathan_lower_deck", 1); }; obj = { 'leviathan_airtanks'; 'leviathan_airregen'; "leviathan_life_wiring"; }; }; leviathan_airtanks = obj { nam = "leviathan_airtanks"; dsc = function(s) local percent = submarine_leviathan.air_level / 432000 * 100; if (percent < 1) then return [[Большую часть помещения занимают {кислородные баллоны}. Толстые стенки из прочного сплава способны выдержать огромное давление. Судя по показаниям приборов, баллоны пусты. ]] else return [[Большую часть помещения занимают {кислородные баллоны}. Толстые стенки из прочного сплава способны выдержать огромное давление. Судя по показаниям приборов, баллоны заполнены на ]] .. tostring(math.floor(percent + 0.5)) .. "%. "; end; end; seen_level = 1; }; leviathan_airregen = obj { nam = "leviathan_airregen"; dsc = function(s) if (submarine_leviathan.refit) then return [[{Установка регенерации воздуха} расположена в углу и, судя по показаниям приборов, отлично работает. ]]; else return [[{Установка регенерации воздуха} сейчас находится в плачевном состоянии -- часть деталей отсутствуют, еще некоторые поломаны. ]]; end; end; seen_level = 1; }; leviathan_wheelhouse = darkroom { nam = "leviathan_wheelhouse"; has_light = function(s) return submarine_leviathan.power_on and submarine_leviathan.battery and submarine_leviathan.circuit_breaks == 0; end; disp = "Левиафан, рубка"; leviathan = true; dsc_lit = function(s) local view = ''; if where(submarine_leviathan).view then if (type(where(submarine_leviathan).view) == "function") then view = where(submarine_leviathan):view(); else view = where(submarine_leviathan).view; end; end; return [[Небольшое помещение в передней части субмарины освещено ярким светом электрических ламп. Через три огромных иллюминатора вы можете увидеть происходящее снаружи субмарины. ]] .. (view); end; dsc_halflit = function(s) local view = ""; if (type(where(submarine_leviathan).view) == "function") then view = where(submarine_leviathan):view(); else view = where(submarine_leviathan).view; end; return [[Небольшое помещение в передней части субмарины освещено слабым светом вашей лампы. Через три огромных иллюминатора вы можете увидеть происходящее снаружи субмарины. ]] .. (view); end; dsc_dark = function(s) local view = ""; if (type(where(submarine_leviathan).view) == "function") then view = where(submarine_leviathan):view(); else view = where(submarine_leviathan).view; end; return [[Небольшое помещение в передней части субмарины не освещено. В темноте вы ничего не можете разглядеть. Через три огромных иллюминатора вы можете увидеть происходящее снаружи субмарины. ]] .. (view); end; way = { kh_vroom("В кают-компанию", "leviathan_wardroom", 2); }; obj = { 'leviathan_handwheel'; 'leviathan_airpump_control'; 'leviathan_wheelhouse_sensors'; "leviathan_wheelhouse_wiring"; }; }; leviathan_handwheel = obj { nam = "leviathan_handwheel"; seen_level = 1; dsc = [[Перед вами расположен {штурвал}. Рядом с ним расположено несколько рычагов. ]]; act = function(s) if (atlantis_found and submarine_leviathan.air_level > 400000 and submarine_leviathan.circuit_breaks == 0 and submarine_leviathan.power_on) then --walkin("demo_end"); local dlg = EngineUtils.getValue(where(submarine_leviathan).handwheel_room); if (dlg) then walkin(dlg); else walkin('leviathan_dlg'); end; elseif (not submarine_leviathan.power_on) then return [[Без электричества Левиафан не сдвинется с места. ]]; elseif (not atlantis_found) then return [[Вы не знаете, куда плыть. ]]; elseif (submarine_leviathan.air_level <= 400000) then return [[Без воздуха вы далеко не уплывете. ]]; elseif (submarine_leviathan.circuit_breaks > 0) then return [[В темноте вы не можете управлять кораблем. ]]; end; end; }; leviathan_airpump_timer = function() if (submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.battery) then submarine_leviathan.air_level = submarine_leviathan.air_level + 4000; if (submarine_leviathan.air_level >= 432000) then submarine_leviathan.air_level = 432000; timer:stop(); lifeoff(leviathan_airpump_control); if here().leviathan then p("Кислородные баллоны заполнены. "); end; end; end; end; leviathan_airpump_control = obj { nam = "leviathan_airpump_control"; dsc = function(s) if (submarine_leviathan.airpump) then return [[Один из них отвечает за управление {воздушными насосами} и находится сейчас во включенном состоянии. ]]; else return [[Один из них отвечает за управление {воздушными насосами} и находится сейчас в выключенном состоянии. ]]; end; end; act = function(s) if (submarine_leviathan.airpump) then submarine_leviathan.airpump = false; timer:stop(); lifeoff(s); return [[Вы выключаете воздушные насосы. ]]; else submarine_leviathan.airpump = true; game.timer = leviathan_airpump_timer; timer:set(1000); lifeon(s); if starlight_dock_appearance == 4 and where(char_starlight_dock) ~= dock_mooring and not starlight_dock_status then put(char_starlight_dock, dock_mooring); return [[Вы включаете воздушные насосы. И в этот момент замечаете на берегу фигуру человека в костюме. ]]; end; return [[Вы включаете воздушные насосы. ]]; end; end; life = function(s) if (submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.battery) then submarine_leviathan.air_level = submarine_leviathan.air_level + 4000; if (here().leviathan) then pr([[Вы слышите гул работающих насосов. ]]); end; if (submarine_leviathan.air_level >= 432000) then submarine_leviathan.air_level = 432000; p("Кислородные баллоны заполнены. "); lifeoff(leviathan_airpump_control); timer:stop(); end; end; end; seen_level = 1; }; leviathan_wheelhouse_sensors = obj { nam = "leviathan_wheelhouse_sensors"; dsc = [[Чуть ниже рычагов находится небольшая {панель} с лампочками и стрелками каких-то приборов. ]]; act = function(s) if (submarine_leviathan.battery) then pr("На панели горят следующие лампочки: "); pr("батарея работает"); if (submarine_leviathan.power_on) then pr(", питание включено"); end; if (submarine_leviathan.airpump) then pr(", воздушные насосы включены"); end; if (submarine_leviathan.circuit_breaks > 0) then pr(", разорвана цепь освещения"); end; pr(". "); else pr("На панели не горит ни одна лампочка. "); end; local percent = submarine_leviathan.air_level / 432000 * 100; pr ([[ Кислородные баллоны заполнены на ]] .. tostring(math.floor(percent + 0.5)) .. "%. "); end; seen_level = 1; }; leviathan_wiring_dsc = [[Под потолком висят какие-то {провода}. ]]; leviathan_wiring_act = function(s) if (submarine_leviathan.power_on and submarine_leviathan.battery) then return [[Возможно, лучше отключить электричество, прежде чем копаться в проводах. ]]; end; if (s.state == 0) then return [[Некоторые провода разорваны. ]]; elseif (s.state == 1) then return [[Некоторые провода перемотаны изолентой. ]]; else return [[Провода в порядке. ]]; end; end; leviathan_wiring_used = function(s, o) if (submarine_leviathan.power_on and submarine_leviathan.battery) then return [[Возможно, лучше отключить электричество, прежде чем копаться в проводах. ]]; end; if (o == item_ducttape and s.state == 0) then s.state = 1; submarine_leviathan.circuit_breaks = submarine_leviathan.circuit_breaks - 1; if (submarine_leviathan.circuit_breaks == 0) then for i = 1, #leviathan_wiring do leviathan_wiring[i]:disable(); end; remove(item_ducttape, pl); end; return [[Вы соединяете провода и заматываете их изолентой. ]]; end; end; leviathan_wheelhouse_wiring = obj { var { state = 2; }; nam = "leviathan_wheelhouse_wiring"; dsc = leviathan_wiring_dsc; act = leviathan_wiring_act; used = leviathan_wiring_used; seen_level = 1; }; leviathan_wardroom_wiring = obj { var { state = 2; }; nam = "leviathan_wardroom_wiring"; dsc = leviathan_wiring_dsc; act = leviathan_wiring_act; used = leviathan_wiring_used; seen_level = 1; }; leviathan_engineering_wiring = obj { var { state = 2; }; nam = "leviathan_engineering_wiring"; dsc = leviathan_wiring_dsc; act = leviathan_wiring_act; used = leviathan_wiring_used; seen_level = 1; }; leviathan_cargo_wiring = obj { var { state = 2; }; nam = "leviathan_cargo_wiring"; dsc = leviathan_wiring_dsc; act = leviathan_wiring_act; used = leviathan_wiring_used; seen_level = 1; }; leviathan_corridor_wiring = obj { var { state = 2; }; nam = "leviathan_corridor_wiring"; dsc = leviathan_wiring_dsc; act = leviathan_wiring_act; used = leviathan_wiring_used; seen_level = 1; }; leviathan_lower_wiring = obj { var { state = 2; }; nam = "leviathan_lower_wiring"; dsc = leviathan_wiring_dsc; act = leviathan_wiring_act; used = leviathan_wiring_used; seen_level = 1; }; leviathan_life_wiring = obj { var { state = 2; }; nam = "leviathan_life_wiring"; dsc = leviathan_wiring_dsc; act = leviathan_wiring_act; used = leviathan_wiring_used; seen_level = 1; }; leviathan_wiring = { leviathan_wheelhouse_wiring; leviathan_wardroom_wiring; leviathan_engineering_wiring; leviathan_cargo_wiring; leviathan_corridor_wiring; leviathan_lower_wiring; leviathan_life_wiring; }; leviathan_dlg = dlg { nam = "leviathan_dlg"; disp = "Левиафан, рубка"; dsc = function() local view = ""; if (type(where(submarine_leviathan).view) == "function") then view = where(submarine_leviathan):view(); else view = where(submarine_leviathan).view; end; return [[Вы находитесь в рубке Левиафана перед штурвалом. Отсюда вы можете направиться куда-нибудь. Яркий свет электрических ламп освещает помещение. ]] .. (view); end; update_options = function() leviathan_dlg:poff( "atlantis", "old_temple", "iraaphaanotrr", "iraaphaanotrr_temple", "dypatreanotrr", "dypatreanotrr_temple", "dypatreanotrr_night", "venaedanotrr", 'venaedanotrr_ravine', 'venaedanotrr_temple', "nleyyslanotrr", "deep_temple", "lseryanotrr"); if (atlantis_found and where(submarine_leviathan) ~= atl_aqua_leviathan_dock) then leviathan_dlg:pon("atlantis"); end; if (temple_found and where(submarine_leviathan) ~= iyh_far_from_entrance_foot) then leviathan_dlg:pon("old_temple"); end; if (iraaphaanotrr_found and where(submarine_leviathan) ~= iraa_near_city_west) then leviathan_dlg:pon("iraaphaanotrr"); end; if (dypatreanotrr_found and where(submarine_leviathan) ~= dyp_center) then leviathan_dlg:pon("dypatreanotrr"); end; if (dypatreanotrr_night_found and where(submarine_leviathan) ~= dyp_night_south) then leviathan_dlg:pon("dypatreanotrr_night"); end; if iraaphaanotrr_temple_found and where(submarine_leviathan) ~= iraa_temple_entrance and where(submarine_leviathan) ~= iyh_ravine_entry_foot then leviathan_dlg:pon("iraaphaanotrr_temple"); end; if (dypatreanotrr_temple_found and where(submarine_leviathan) ~= dyp_temple_entrance) then leviathan_dlg:pon("dypatreanotrr_temple"); end; if venaedanotrr_found and where(submarine_leviathan) ~= ven_center then leviathan_dlg:pon("venaedanotrr"); end; if venaedanotrr_ravine_found and where(submarine_leviathan) ~= ven_ravine_entrance then leviathan_dlg:pon("venaedanotrr_ravine"); end; if venaedanotrr_temple_found and where(submarine_leviathan) ~= ven_temple_entrance then leviathan_dlg:pon("venaedanotrr_temple"); end; if nleyyslanotrr_found and where(submarine_leviathan) ~= nley_near_cliff_1 then leviathan_dlg:pon('nleyyslanotrr') end; if deep_temple_found and not dt_temple_done and where(submarine_leviathan) ~= dt_labyrinth_foot and where(submarine_leviathan) ~= dt_temple_ravine and where(submarine_leviathan) ~= dt_labyrinth_ravine_bridge_se_foot and where(submarine_leviathan) ~= dt_labyrinth_ravine_bridge_nw_foot and where(submarine_leviathan) ~= dt_labyrinth_bridge and where(submarine_leviathan) ~= dt_labyrinth_ravine_foot then leviathan_dlg:pon('deep_temple') end; if lseryanotrr_found then leviathan_dlg:pon('lseryanotrr') end; end; enter = function(s) s.update_options(); end; phr = { {tag="atlantis", always = "true", "Атлантида", function() set_music('music/atlantis.ogg'); move(submarine_leviathan:enable(), "atl_aqua_leviathan_dock"); if raybox_task then raybox_task_finished = true; end; leviathan_dlg:update_options(); walk(atl_entry); end}, {tag="old_temple", always = "true", "Старый храм", function() return "Вы прибыли в старый храм."; end, function() if raybox_task then raybox_task_finished = true; end; set_music('music/navjiarr.ogg'); move(submarine_leviathan:enable(), "iyh_far_from_entrance_foot"); leviathan_dlg:update_options(); lifeoff(iyh_far_from_entrance); atl_iyh_shockfish_away = 0; walk('iyh_far_from_entrance'); end}, {tag="iraaphaanotrr", always = "true", "Ираафаанотр", function() if raybox_task then raybox_task_finished = true; end; set_music('music/navjiarr.ogg'); move(submarine_leviathan:enable(), "iraa_near_city_west"); leviathan_dlg:update_options(); walk(iraa_entry); end}, {tag="iraaphaanotrr_temple", always = "true", "Храм Ираафаанотра", function() if raybox_task then raybox_task_finished = true; end; set_music('music/navjiarr.ogg'); atl_navjiarr_temple_seen = true; move(submarine_leviathan:enable(), "iraa_temple_entrance"); leviathan_dlg:update_options(); walk(iraa_temple_entry); end}, {tag="dypatreanotrr", always = "true", "Дипатреанотр", function() if raybox_task then raybox_task_finished = true; end; set_music('music/navjiarr.ogg'); move(submarine_leviathan:enable(), "dyp_center"); leviathan_dlg:update_options(); walk(dyp_entry); end}, {tag="dypatreanotrr_night", always = "true", "Дипатреанотр, ночь", function() if raybox_task then raybox_task_finished = true; end; set_music('music/navjiarr.ogg'); move(submarine_leviathan:enable(), "dyp_night_south"); leviathan_dlg:update_options(); walk(dyp_entry_night); end}, {tag="dypatreanotrr_temple", always = "true", "Храм Дипатреанотра", function() if raybox_task then raybox_task_finished = true; end; set_music('music/navjiarr.ogg'); atl_navjiarr_temple_seen = true; move(submarine_leviathan:enable(), "dyp_temple_entrance"); leviathan_dlg:update_options(); walk(dyp_temple_entry); end}, {tag="venaedanotrr", always = "true", "Венаэданотр", function() if raybox_task then raybox_task_finished = true; end; set_music('music/venaedanotrr.ogg'); move(submarine_leviathan:enable(), "ven_center"); leviathan_dlg:update_options(); walk(ven_intro); end}, {tag='venaedanotrr_ravine', always = 'true', 'Ущелье около Венаэданотра', function() if raybox_task then raybox_task_finished = true; end; set_music('music/venaedanotrr.ogg'); move(submarine_leviathan:enable(), 'ven_ravine_entrance'); leviathan_dlg:update_options(); walk(ven_ravine_intro); end}, {tag='venaedanotrr_temple', always = 'true', 'Храм Венаэданотра', function() if raybox_task then raybox_task_finished = true; end; set_music('music/venaedanotrr.ogg'); move(submarine_leviathan:enable(), 'ven_temple_entrance'); leviathan_dlg:update_options(); walk(ven_temple_intro); end}, {tag='nleyyslanotrr', always = 'true', 'Нлейисланотр', function() if raybox_task then raybox_task_finished = true; end; set_music('music/nleyyslanotrr.ogg'); move(submarine_leviathan:enable(), 'nley_near_cliff_1'); leviathan_dlg:update_options(); if nleyyslanotrr_visited then pr [[Вы возвращаетесь в Нлейисланотр и дожидаетесь ночи. ]]; walk(leviathan_wheelhouse); else walk(nley_intro); end; end}, {tag='deep_temple', always = 'true', 'Неизвестный храм', function() if raybox_task then raybox_task_finished = true; end; set_music('music/ancient_temple.ogg'); move(submarine_leviathan:enable(), 'dt_labyrinth_foot'); leviathan_dlg:update_options(); walk(dt_intro); end}, {tag='lseryanotrr', always = 'true', 'Лсэрианотр', function() walkin(leviathan_final_confirm); end}, {always = "true", "Назад", function() stead.need_scene(); back(); return false; end}; }; }; leviathan_final_confirm = dlg { nam = 'leviathan_final_confirm'; disp = 'Левиафан, рубка'; entered = [[После прибытия в Лсэрианотр, вы не сможете его покинуть, пока не завершите все дела. Вы точно хотите продолжить? ]]; phr = { {always=true, "Да", function(s) set_music('music/lseryanotrr.ogg'); remove('item_toolbox', pl); leviathan_dlg:update_options(); walk(lse_entered); end}; {always=true, "Нет", function(s) stead.need_scene(); back(); return false; end}; }; } phone_wheelhouse = obj { nam = "phone_wheelhouse"; disp = "Телефон"; dsc = [[Рядом со штурвалом установлен {телефонный аппарат} для связи в пределах субмарины. ]]; act = function(s) if (not submarine_leviathan.power_on or not submarine_leviathan.battery) then return [[Без электричества телефон не заработает. ]]; elseif (#pl.party < 1) then return [[Здесь никого нет. ]]; else phone_dlg.from_wardroom = false; walkin("phone_dlg"); end; end; seen_level = 1; }; phone_cabin = obj { nam = "phone_cabin"; disp = "Телефон"; dsc = [[На столе установлен {телефонный аппарат} для связи в пределах субмарины. ]]; act = function(s) if (not submarine_leviathan.power_on or not submarine_leviathan.battery) then return [[Без электричества телефон не заработает. ]]; elseif (#pl.party < 1) then return [[Здесь никого нет. ]]; else phone_dlg.from_wardroom = false; walkin("phone_dlg"); end; end; seen_level = 1; }; phone_wardroom = obj { nam = "phone_wardroom"; disp = "Телефон"; dsc = [[На столе, рядом с креслом капитана установлен {телефонный аппарат} для связи в пределах субмарины. ]]; act = function(s) if (not submarine_leviathan.power_on or not submarine_leviathan.battery) then return [[Без электричества телефон не заработает. ]]; elseif (#pl.party < 1) then return [[Здесь никого нет. ]]; elseif ArrayUtils.indexOf(pl.party, 'radcliffe') == 0 and ArrayUtils.indexOf(pl.party, 'phaetlarr') == 0 then return [[Весь экипаж находится здесь. Звонить незачем. ]]; else phone_dlg.from_wardroom = true; walkin("phone_dlg"); end; end; seen_level = 1; }; phone_dlg = dlg { nam = "phone_dlg"; disp = "Телефон"; hideinv = true; dsc = [[Вы снимаете трубку. ]]; from_wardroom = nil; entered = function(s) poff("phaetlarr", "learr", "radcliffe", "wright", "anna"); for i = 1, #pl.party do if not s.from_wardroom or (pl.party[i] == 'phaetlarr' or pl.party[i] == 'radcliffe') then pon(pl.party[i]); end; end; end; phr = { { tag = "phaetlarr", always = true, "[Вызвать Фаэтларра]", function(s) phaetlarr_dlg.from_call = true; phaetlarr_dlg.home = false; phaetlarr_dlg.underwater = false; walkin("phaetlarr_dlg"); end}, { tag = "learr", always = true, "[Вызвать Леарр]", function(s) if char_learr.home == 'leviathan_cabin_3' then return [[Леарр не берет трубку. ]]; else learr_dlg.from_call = true; learr_dlg.home = false; learr_dlg.underwater = false; walkin("learr_dlg"); end; end}, { tag = "radcliffe", always = true, "[Вызвать Уолтера Рэдклиффа]", function(s) radcliffe_dlg.from_call = true; radcliffe_dlg.home = false; walkin("radcliffe_dlg"); end}, { tag = "wright", always = true, "[Вызвать Джека Райта]", function(s) wright_main_dlg.from_call = true; wright_main_dlg.home = false; walkin("wright_main_dlg"); end}, { tag = "anna", always = true, "[Вызвать Анну Рэдклифф]", function(s) anna_dlg.from_call = true; anna_dlg.home = false; walkin("anna_dlg"); end}, { tag = "exit", always = true, "[Положить трубку]", code = [[back()]]} } }; global { lev_started = false; }; function leviathan_init() if not lev_started then lev_started = true; put(submarine_leviathan:disable(), dock_mooring); local i = 0; while i < submarine_leviathan.circuit_breaks do local t = rnd(#leviathan_wiring); if (leviathan_wiring[t].state == 2) then leviathan_wiring[t].state = 0; i = i + 1; end; end; end; end; function leviathan_start() if submarine_leviathan.battery and submarine_leviathan.power_on and submarine_leviathan.airpump and submarine_leviathan.air_level < 432000 then game.timer = leviathan_airpump_timer; timer:set(1000); end; end;