diff --git a/dock2.lua b/dock2.lua --- a/dock2.lua +++ b/dock2.lua @@ -26,11 +26,11 @@ dock_gate = obj { dsc = function(s) if (s.open) then return [[ - Ржавые {ворота} застыли в приоткрытом состоянии, достаточно, чтобы вы смогли проникнуть за них. + Ржавые {ворота} слегка приоткрыты. ]]; else return [[ - На проржавевших воротах, ведущих на территорию дока, висит {амбарный замок}. + Проржавевшие ворота дока заперты на тяжелый навесной {замок}. ]]; end; end; @@ -41,7 +41,7 @@ dock_gate = obj { ]]; else return [[ - Массивный старый замок уже изрядно проржавел и пришел в негодность. Даже если бы у вас был ключ, вы врядли смогли бы открыть его. + Замок давно пришел в негодность. Даже если бы у вас был ключ, вы врядли смогли бы открыть его. ]]; end; end; @@ -81,22 +81,42 @@ dock_inside = room { dock_boxes = obj { nam = "dock_boxes"; disp = "Ящики"; - dsc = "Ровными рядами вокруг расположены старые грузовые {контейнеры}. Большинство из них проржавели настолько, что не осталось никаких опознавательных знаков об их происхождении и содержимом. "; - act = "Скорее всего, большинство из этих контейнеров пусты - врядли кто-то позволил бы пропадать такому количеству добра. "; + dsc = "Ровными рядами вокруг расположены старые грузовые {контейнеры}. Краска на большинстве из них повреждена настолько, что не осталось никаких опознавательных знаков об их происхождении и содержимом. "; + act = function(s) + if (not s.searched) then + s.searched = true; + put(item_pump_broken, pl); + return [[ + В одном из ящиков вы находите неисправный ручной насос. + ]]; + end; + end; +}; + +leviathan_entry = room { + nam = "leviathan_entry"; + disp = "В люк"; + enter = function(s) + if (dock_leviathan.pump_state == 1) then + walk('leviathan_airlock'); + else + return "Отсек заполнен водой. Вы не можете туда спуститься. ", false; + end; + end; }; dock_mooring = room { nam = "dock_inside"; disp = "Причал"; dsc = [[ - Вы находитесь у причала. Здесь нет ящиков и почти пусто, не считая нескольих кучек мусора - старых гнилых деревяшек, каких-то ржавых металлических трубок, мешков с неизвестным содержимым. Вы не слышите ничего, кроме шума мутной воды, завываний ветра и скрипа ржавого металла. + Вы находитесь у причала. Здесь почти пусто, не считая нескольких кучек мусора - старых гнилых деревяшек, каких-то ржавых металлических трубок, мешков с неизвестным содержимым. Вы не слышите ничего, кроме шума мутной воды, завываний ветра и скрипа ржавого металла. ]]; view = [[ Левиафан находится в доке ]]; way = { vroom("К пульту управления краном", "dock_crane_control"); - vroom("В люк", "leviathan_disabled_airlock"):disable(); + leviathan_entry:disable(); }; obj = { "dock_leviathan", @@ -108,48 +128,71 @@ dock_leviathan = obj { nam = "dock_leviathan"; disp = "Левиафан"; submerged = true; + pump_state = 0; -- 0 в отсеке вода; 1 - в отсеке нет воды dsc = function(s) if (s.submerged) then return "Под поверхностью воды виден какой-то большой металлический {предмет}. "; else - return "На тросах подвешена странная машина. Торпедообразный корпус, в верхней части которого виден наглухо задраенный {люк}, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности покрыты грязью, не позволяя заглянуть внутрь. В передней части на борту прикреплена слегка поржавевшая табличка \"А04 - Левиафан\". " + if (s.open) then + return [[ + На тросах подвешена странная машина. Торпедообразный корпус, в верхней части которого находится {люк}, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка "А04 - Левиафан". + ]] + else + return [[ + На тросах подвешена странная машина. Торпедообразный корпус, в верхней части которого виден наглухо задраенный {люк}, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности, покрыты грязью. В передней части на борту прикреплена слегка поржавевшая табличка "А04 - Левиафан". + ]] + end; end; end; act = function(s) if (s.submerged) then - return "В мутной воде вы не можете понять, что это. "; + return "Какой-то большой предмет. В мутной воде вы не можете понять, что это. "; elseif (s.open) then --TODO s.open = false; - path("В люк"):disable(); - return "Вы задраиваете люк"; + leviathan_entry:disable(); + return "Вы задраиваете люк."; else --TODO s.open = true; - path("В люк"):enable(); - return "Вы отдраиваете люк"; + leviathan_entry:enable(); + if (s.pump_state < 2) then + return "Вы отдраиваете люк. Отсек внутри заполнен водой. "; + else + return "Вы отдраиваете люк. "; + end; end; end; + used = function(s, o) + if (o == item_pump) then + dock_leviathan.pump_state = 1; + remove(item_pump, pl); + return [[ + Вы откачиваете воду из отсека и теперь можете спуститься в него. + ]]; + end; + end; }; dock_crane = obj { nam = "dock_crane"; disp = "Подъемник"; state = 0; + broken = true; dsc = function(s) if (s.state == 0) then - return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} сейчас подняты. Возле одной из ног основания установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; + return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} сейчас подняты. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; elseif (s.state == 1) then - return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно - они почти полностью погружены в грязную воду. Возле одной из ног основания установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; + return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} опущены насколько это возможно - они почти полностью погружены в грязную воду. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; elseif (s.state == 2) then - return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} подцеплены к предмету, скрывающемуся под водой. Возле одной из ног основания установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; + return "Чуть в стороне от вас огромный металлический кран нависает над водой. {Тросы} подцеплены к предмету, скрывающемуся под водой. Возле одной из опор крана установлена небольшая кабинка, в которой по-видимому расположены механизмы для управления краном. "; else - return "Чуть в стороне от вас огромный металлический кран нависает над водой. " -- На крюках подвешена странная машина. Торпедообразный корпус, в верхней части которого виден наглухо задраенный люк, а в задней видно несколько гребных винтов. Иллюминаторы, частично показавшиеся на поверхности покрыты грязью, не позволяя заглянуть внутрь. В передней части на борту прикреплена слегка поржавевшая табличка "А04 - Левиафан". + return "Чуть в стороне от вас огромный металлический кран нависает над водой. "; end; end; act = function(s) if (s.state == 0) then - return "Нужно опустить тросы"; + return "Тросы слишком высоко"; elseif (s.state == 1) then s.state = 2; return "Вы подцепляете тросы к скрывающемуся под водой предмету. "; @@ -182,9 +225,8 @@ crane_lever_vertical = obj { nam = "crane_lever_vertical"; dsc = "{Один из них} установлен вертикально и имеет несколько промежуточных положений. Сбоку от него нарисованы стрелки вверх и вниз. "; act = function(s) - print "fuck"; if (dock_crane.broken) then - return "Как ни дергаете вы рычаг, ничего не происходит"; + return "Вы двигаете рычаг, но ничего не происходит"; else -- TODO refactor -- TODO texts! @@ -215,5 +257,51 @@ crane_lever_rail = obj { crane_service_access_panel = obj { nam = "crane_service_access_panel"; + state = 0; + dsc = function(s) + if (s.state == 0) then + return [[ + Под панелью управления прикреплена на винтах металлическая {пластина}, закрывающая механизм. + ]]; + else + return [[ + Под панелью управления расположен {механизм} управления. Металлическая пластина, закрывавшая его, лежит рядом. + ]]; + end; + end; + act = function(s) + if (s.state == 0) then + return [[ + Вы не сможете открыть это руками. + ]]; + else + if (dock_crane.broken) then + return [[ + Вы заглядываете внутрь механизма. Часть шестерней сильно изношена. + ]]; + else + return [[ + Вы заглядываете внутрь механизма. Все шестерни исправлены и находятся на своих местах. + ]]; + end; + end; + end; + used = function(s,o) + if (o == item_toolbox) then + if (s.state == 0) then + s.state = 1; + return [[ + При помощи отвертки из ящика вы снимаете защитную панель, открывая доступ к внутренностям механизма. + ]]; + else + s.state = 0; + return [[ + Вы возвращаете панель на место и закрепляете ее винтами. + ]]; + end; + else + return false; + end; + end; };