-- $Name: Робот, который видит...$ -- $Author: j-maks$ -- $Version: 0.1$ -- $E-mail: jmaksima_at_gmail_dot_com$ instead_version '1.9.1'; require "lib" game.enable_save = false; require 'para'; require 'dash'; require 'quotes'; require 'nouse'; require 'hideinv'; --require 'dbg'; pl = player {nam = "WR015", var { diag_stat=false, leg_stat=false, arm_stat=false, stand_stat=false, stand_try=false, standup_try=false, stand_sw_stat=false, roll_stat=false, crawl_stat=false, look_stat = false }, }; main = timerpause(520, 315, "main2"); main2 = room {nam = "...", hideinv = true, title = { "Р", "О", "Б", "О", "Т", " ", "К", "О", "Т", "О", "Р", "Ы", "Й", " ", "В", "И", "Д", "И", "Т" }, num = 8, enter = function() music_("spell",0)(); end, dsc = [[Это была долгая и продолжительная гибернация, словно затянувшаяся ледяная полярная ночь ... Но вот настало время моей вахты, я -- WR015, пора выходить в операционный режим. ]]; obj = { vway("nxt", '{Далее}', 'robot_room') } }; endgame = room { nam="Выход из гибернации", enter = function() mute_()(); complete_("robot")() end, dsc = [[ Сегодня -- день когда я выхожу на корабельное дежурство, мой номер -- WR015, и центральный компьютер активировал меня несколько минут назад. ^Моя операционная система загрузилась и я начал осознавать, что в режиме гибернации -- видел сны, удивительное дело для робота, надо будет при случае обсудить этот вопрос с центральным компьютером... ^^Я постепенно активировал все свои контуры и схемы, внезапно, смутные и тревожные, смазанные реальностью картины увиденного в эту длящуюся как одинокая полярная ночь, сна, на короткие мгновения всколыхнули какие-то странные мысли и предположения в моем мозгу, но я отбросил их и стал изучать отчеты поступающие от системы диагностики...]] ,act = gamefile_("engineer.lua") ,obj = { vobj("next", txtc("^{Продолжение...}")) } } robot_room = room {nam = "Спецблок", var { cam_door_open=false, cam_door_oiled = false }, pxa = { { "panel", 120 }, { if_("robot_room.cam_door_open","door2_open","door4"), 200 }, { if_("exist(electro_swab)", "cleaner"), 340 } }, dsc = function(s) if not me().stand_stat then if not me().crawl_stat and not me().stand_sw_stat then if s.cam_door_open then p [[ Я стою в своей камере хранения, прямо передо мной открытый дверной проем. Как только я активировал дверь во всем отсеке включилось освещение, теперь я наблюдаю как мерно нагреваются осветительные панели, разгоняя окружающую темноту. ]]; else p [[ Я включил звуковые и зрительные анализаторы и оценил обстановку. Искусственное освещение отсутствует, я слышу равномерные звуки работы различной электроники корабельных систем. ]]; end; elseif me().crawl_stat and not have(electro_swab) then p [[ Я прополз из отсека в свою камеру гибернации, неловко цепляясь манипулятором за покрытие пола и отталкиваясь ногой от различного хлама, попавшегося на пути. ]]; elseif have(electro_swab) and not me().stand_sw_stat then p [[ Я лежу на полу своей камеры, держась манипулятором за электрошвабру. ]]; elseif me().stand_sw_stat then p [[ "Камера для гибернации, уютное вместилище для одной единицы "боевого" робота вахтера", -- такие грустные мысли посетили меня, при осмотре своей камеры хранения. ]] else p [[ Я в камере гибернации. "Совсем не так я представлял себе свое дежурство", -- подумалось мне оглядываясь на пройденный путь. ]]; end; end; end, act = function(s,w) if w == 'nxt' then walk(endgame); elseif w == 'butt_op' then if not have(electro_swab) then if not s.cam_door_open then p [[ Я протянул манипулятор и переключил рычаг управления. Дверь моей камеры хранения стала медленно опускаться, издавая протяжный скрип... "Надо бы смазать направляющие и движущиеся части, автоматически замечаю я..." ]]; s.cam_door_open = true; else p [[ Протянув манипулятор и переключив рычаг, я услышал как раздалось шипение пневмоприводов и дверь, поскрипывая, поднялась, наглухо закрыв проем. Стало темно. ]]; s.cam_door_open = false; end; else p [[ Неуверенно балансируя на одной ноге, я протянул манипулятор с зажатой в нем электрошваброй к рычагу управления и мне почти удалось, в последний момент, я выронил швабру и падая зацепил рычаг. ^Упал я прямо на начавшую подниматься дверь, мое тело стало подниматься вместе с ней... ^^Прошло мгновение, прежде чем я осознал фатальность своей ошибки, и тут сработал сигнал тревоги, но было уже поздно... Я попытался оттолкнуться от двери и спрыгнуть внутрь камеры, тем самым лишь усугубив свое положение, переместив голову под неумолимый пресс... Последней мыслью в моем угасающем позитронном мозгу, было осознание всей нелепости, абсурдности происходящего... ^Кажется я закричал... ]]; remove(electro_swab,me()); disable_all(objs(s)); enable(exist('nxt',s));end; end; end, way = { 'robot_deck', }, obj = { vobj("butt_op", 'Передо мной на стене расположена {панель управления}, подсвечиваемая тусклыми индикаторами.'), vobj("nxt", '{Далее}'):disable() }, exit = function(s,e) if e == main2 then disable_all(objs(e)); elseif e == robot_deck then if not s.cam_door_open then p [[ Я постучал манипулятором по двери, перегораживающей основной отсек и мою камеру. Раздался металлический глухой звук. ]]; elseif me().crawl_stat or me().stand_sw_stat then p [[ Зачем мне ползти обратно в отсек, если я с таким трудом добирался в камеру. ]]; else return true; end; return false; end; end, }; ------------- robot_deck = room { nam = function(s) if here() == robot_room thenp (_("Выйти в Отсек N12" elsep (_("Отсек 12")))) end; end, pxa = { { "box", 10 }, { "box", 110 }, { "panel_broken", 220 }, { "door2_open", 300 } }, var { seen = false; }, dsc = function(s) if not s.seen then if me().arm_stat then p [[ Лежа на полу я пошевелил оставшимися конечностями. Кажется все в норме. ]]; else p [[ Я сделал шаг и ... выпал из камеры на пол отсека №12, предназначенного для хранения роботов подобных мне. Что-то не так с моими сервоприводами?!? ]]; end; elseif s.seen then if me().stand_try then if me().roll_stat then p [[ Отсек №12 -- оплот и родной дом для трети всех роботов предназначенных для несения вахты на корабле. И вот теперь я лежу на полу этого дома и смотрю на перемигивающиеся на потолке световые панели. ]]; end; else p [[ Кажется, если я так и буду продолжать лежать и бездействовать, то в итоге мои схемы потускнеют, и я превращусь в еще один кусок хлама среди этого побоища. ]]; end; end; end, act = function(s, w) if w == 'look' then if not me().roll_stat then p [[ Я осматриваюсь и понимаю, -- что-то неладное творится на этом корабле. В обширном отсеке заметны следы разного рода разрушений, некоторые двери камер хранения для вахтовых роботов искарежены, некоторые отсуствуют напрочь. Стеновые панели, пол и потолок в следах гари и сажи, по всему отсеку тут и там разбросаны запчасти и детали разного рода и назначения, судя по всему принадлежащие не только роботам. ^В одном из углов свалена целая куча тел моих сотоварищей. ]]; elseif not me().stand_try then p [[ Я осматриваю окружающую меня действительность, приподнявшись на локте манипулятора и вращая голову вокруг своей оси. То что я вижу удручает меня еще больше... ^В одной из стен отсека остутствует часть обшивки внушительных размеров, повсюду свисают токопроводящие кабели, в некоторых местах наблюдаются их обрывы и оголенные концы порождают искры, замыкаясь в свободном парении, осветительные панели и лампы работают наперебой. ^В той куче сваленных друг на друга частей тел и деталей роботов я заметил какое-то движение, что-то серое с красными глазами и хвостом промелькнуло в потрохах одного из роботов. ]]; elseif not me().standup_try then p [[ Проанализировав помещение отсека для камер хранения, и понимаю, что все возможные выходы из отсека либо заблокированы автоматикой, либо не функционируют, либо завалены непроходимой кучей мусора и хлама... ^Служебный элеватор обесточен, видимо из-за проблем с электропроводкой. ^Единственный возможный выход -- в открытый космос. При этой мысли я в который раз поблагодарил своих создателей сделавших меня роботом, мне не нужен воздух чтобы продолжать функционировать. ]]; elseif me().stand_try and me().standup_try then p [[ Все мои попытки что-либо сделать не принесли результатов, нужно придумать и попробовать что-то еще... ]]; me().look_stat = true; end; if not s.seen then if not me().leg_stat then p [[ ^^Бегло взглянув на свою камеру гибернации, я заметил в ней электрошвабру. ^"И что она там делает?!"]]; else p [[ ^^Круто вывернув голову и проанализировав камеру хранения, я вижу, что там одиноко стоит электрошвабра, видимо она заменяла мне отсутствующую ногу, пока я находился в режиме гибернации. ]]; s.seen = true; end; end; elseif w == 'test' then if me().diag_stat and me().arm_stat and me().leg_stat then p [[ Я в очередной раз запускаю программу диагностики... ^^>> Все системы работают исправно... ^^"Ложь!! Сплошная ложь, это не может быть правдой... Ведь мои зрительные сенсоры исправны в отличии от руки и ноги."]]; else p [[ Я еще раз запускаю стандартный тест самодиагностики и просматриваю отчеты по работе, тест все так же продолжает сообщать, что все в порядке, все системы работают в норме, немного изучив исходные данные и перепроверив схемы, обнаруживаю инородный код в программе диагностики... ^"Кто-то влез в меня и переписал программу!!! Неслыханное варварство!!!" ]]; me().diag_stat = true; end; elseif w == 'exam' then if not me().roll_stat then p [[ Я осматриваю свое тело, насколько это вообще возможно назвать осмотром, если ты лежишь упершись лицом в пол... ^Если уж быть совсем точным, -- я осматриваю то, что осталось от моего тела и наконец убеждаюсь, что у меня отсутствует правый манипулятор и одна нога. ^"Как такое вообще могло произойти?! Почему не сработал сигнал безопасности?" ]]; me().arm_stat = true; me().leg_stat = true; else p [[ Я приподнимаюсь на манипуляторе и внимательно осматриваю себя. На месте разъема под правый манипулятор в теле зияет темная дыра и торчат оконечные шлейфы, такая же ситуация и вместо одной ноги... Все мое механическое тело покрыто слоем пыли и некогда блестящие детали корпуса потускнели. На груди красуется заводской номерной шильдик, с выбитыми на нем буквами -- WR01. ^"Постойте-ка, я же точно уверен, что я -- WR015, моя смена заступать на корабельную вахту... Что же на самом деле тут происходит и что произошло до моего дежурства?? Это какой-то бред, так бывает только во сне... Нужно каким-то образом добраться до центральной консоли управления в 5-ом отсеке и просмотреть отчеты других роботов, но сначала нужно встать на ноги." ]]; end; elseif w == 'stand_up' then if me().roll_stat then p [[ Я беспомощно размахиваю одним манипулятором в воздухе, пытаясь найти хоть какую-то опору и оставшейся ногой, делаю попытки оттолкнуться от пола, чтобы подняться. Все тщетно. Гнить мне в одной из куч мусора до скончания веков... ]]; me().stand_try = true; else p [[ Я сгибаю манипулятор в локтевом суставе и упираюсь в пол, криво изогнувшись подтягиваю ногу и сгибаю ее в коленном суставе... Некоторое время я балансирую, потом начинаю медленно поднимать, как домкратом, свое тело левой рукой, разгибая все больше, в какой-то момент я на одно мгновение теряю тонкую нить равновесия и подскользнувшись, в попытках все исправить, с грохотом падаю на пол. ]]; me().standup_try = true; end; elseif w == 'roll_up' then if not me().roll_stat then p [[ Действуя одной рукой как рычагом я попробовал перевернуться и у меня получилось. Теперь я лежу на спине и вижу намного больше в окружающей обстановке. ]]; me().roll_stat = true; else p [[ Я стал раскачивать свое тело, упершись манипулятором в пол и в решающий момент сделал толчок полусогнутой ногой, не совсем приятно падать ударяясь лицевыми сенсорами в пол, но так или иначе я опять перевернулся на грудь. ]]; me().roll_stat = false; end; elseif w == 'crawl' then if me().roll_stat then p [[ Довольно трудно ползти лежа на спине, но я попробовал, со стороны наверно это выглядело забавно, на полу лежит робот и исполняет танец какого-то космического моллюска. ]]; else p [[ Я протянул манипулятор вперед и вцепился в стоящий на полу ящик, немного помогая себе ногой, я подтянулся и развернул свое тело в сторону камеры хранения. ]]; me().crawl_stat = true; end; elseif w == 'cr_cam' then walk(robot_room) end; if not me().crawl_stat then if me().arm_stat and me().leg_stat and me().diag_stat and s.seen then enable_all(objs(s)); if me().stand_try and me().standup_try and me().look_stat then enable(exist('crawl', s)); else disable(exist('crawl', s)); disable(exist('cr_cam', s)); end; disable(exist('cr_cam', s)); end; else disable_all(objs(s)); enable(exist('cr_cam', s)); end; end, obj = { vobj('exam', '{Осмотреть себя}'), vobj('look', '{^Осмотреться}'), vobj('test', '{^Запустить диагностику}'), vobj('stand_up', '{^^Попытаться подняться}'):disable(); vobj('roll_up', '{^Перевернуться}'):disable(); vobj("crawl", '{^^Попробовать ползти}'):disable(), vobj("cr_cam", '{Ползти в камеру}'):disable(), }, exit = function(s, t) if t == robot_room then disable_all(objs(t)); put('electro_swab', t) end; end, }; ------------- electro_swab = obj { nam = "Электрошвабра", dsc = [[ В моей камере стоит {электрошвабра}. ]],tak = 'Я подполз к швабре и схватил ее манипулятором.', inv = function(s) if me().crawl_stat then p [[ Оперевшись на одну из стен камеры и помогая себе шваброй, примерно со второй попытки мне удалось подняться на одну ногу. Теперь я стою на одной ноге и вместо второй упираюсь в пол манипулятором с зажатой шваброй. ]]; me().crawl_stat = false; me().stand_sw_stat = true; enable(exist('butt_op', here())); else p [[ Стандартная электрошвабра, такой пользуются роботы при уборке помещений. Подходит для большинства типов поверхностей. ]]; end; end, nouse = 'Предполагаю, что это не самое правильное применение для электрошвабры.', };