insteadose-3/robot.lua

58 lines
21 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- $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 = 'Предполагаю, что это не самое правильное применение для электрошвабры.', };