insteadose-3/meteor.lua

489 lines
19 KiB
Lua
Raw Normal View History

2018-08-09 12:26:42 +03:00
-- $Name: Пояс астероидов$
instead_version "1.9.1";
require "lib"
require "dash";
game.codepage="UTF-8";
game.use = function()
p'Би-би. Я не могу этого сделать.';
hp = hp - 1; if hp == 0 then walk('end5');end;
end;
global {
q1 = 0;
q2 = 0;
q3 = 0;
q4 = 0;
q5 = 0;
hp = 31;
}
st = stat {
nam = function(s)
p ('До отключения осталось: ',hp,' мин^');
end
};
main = timerpause(700, 520, "main2");
main2 = room {
nam = "...";
enter = music_("spookyloop", 0);
title = { "П", "О", "Я", "С", " ", "А", "С", "Т", "Е", "Р", "О", "И", "Д", "О", "В" };
num = 7;
obj = {vway("a1", [[Запустить процесс синхронизации: {старт}. ]], 'loc1')
},
};
robo = obj{
nam = '_';
dsc = 'Отсек почти пуст. В центре стоит {робот}. ';
act = 'Би-би. Я мыслю. Я существую. Я - робот.';
};
glass = obj{
nam = '_';
dsc = '^В стене открыт огромный {иллюминатор}. ';
act = 'Космос. Сияют звезды. Приближается пояс астероидов.';
};
panel = obj{
nam = '_';
dsc = '^Рядом стоит {панель} управления. ';
act = 'Статус эксперимента: завершён. Модель: WR069.';
};
door = obj{
nam = '_';
dsc = 'В конце отсека есть {дверь}. ';
act = 'Статус эксперимента: завершён. Модель: WR069.';
};
loc1 = room {
nam = "Отсек кибер-крионики";
pxa = {
{ "window", 10 },
{ "panel", 70 },
{ "robot", 180 },
{ "door1", 370 }
};
obj = {robo, glass, panel,
vway("_", [[^В конце отсека есть {дверь}.]], 'loc2')
},
};
loc2 = room {
nam = "Отсек кибер-крионики";
pxa = {
{ "window", 10 },
{ "panel", 70 },
{ "robot", 180 },
{ "door1", 370 }
};
obj = {
vway("_", [[Дверь закрыта. На экране появляется сообщение:
^"Доступ закрыт. До начала вахты: 10 дней."
^У робота возникает странное чувство. {Чувство?}]], 'loc3')
},
};
loc3 = room {
nam = "Отсек кибер-крионики";
pxa = {
{ "window", 10 },
{ "panel", 70 },
{ "door1", 370 }
};
obj = {
vway("_", [[Робот подходит к иллюминатору. В стекле на мгновение отражается лицо мужчины.
Странные помехи вскоре проходят. Красные огоньки зрительных сенсоров внимательно смотрят во тьму.
Мимо пролетают десятки астероидов. Внезапно сильные толчки начинают сотрясать корабль. ^^{Далее}
]], 'loc4')
},
};
loc4 = room {
nam = "Отсек кибер-крионики";
pxa = {
{ "window", 10 },
{ "panel", 70 },
{ "door1_open", 370 }
};
obj = {
vway("_", [[За дверью раздаются выстрелы. Затем наступает тишина. Проходит несколько минут.
Внезапно дверь разлетается на кусочки от мощного выстрела. Лазерный луч попадает роботу прямо в корпус.
Робот отключается. Срабатывает {тревога}.
]], 'loc5')
},
};
loc5 = room {
nam = "Отсек кибер-крионики";
pxa = {
{ "window", 10 },
{ "panel", 70 },
{ "door1_open", 370 }
};
obj = {
vway("_", [[Через некоторое время тревога проходит. Наступает тишина.
Вскоре робот поднимается на ноги. Сенсоры внимательно осматривают корпус.
Повреждена основная батарея питания. Это очень серьезно.
Нужно срочно найти замену и понять, что же произошло на корабле. {Би-би}!
]], 'loc6')
},
};
glass2 = obj{
nam = '_';
dsc = 'Отсек почти пуст. В стене открыт огромный {иллюминатор}.';
act = 'Стекло кажется прочным. Пояс астероидов остался позади.';
used = function(s,w)
if w == blaster then inv():del('blaster');inv():del('st'); walk('end4'); end;
end;
};
panel2 = obj{
nam = '_';
dsc = 'Рядом стоит {панель} управления. ';
act = 'Компьютерный терминал не работает.';
used = function(s,w)
if w == blaster then hp = hp - 1; if hp == 0 then walk('end5');end;
p'Робот стреляет из бластера. Ничего не происходит.'; inv():del('blaster'); end;
end;
};
door = obj{
nam = '_';
dsc = 'Можно выйти в {коридор}.';
act = function()
walk('loc7');
end;
};
loc6 = room {
nam = "Отсек кибер-крионики";
pxa = {
{ "window", 10 },
{ "panel", 70 },
{ "door1_open", 370 }
};
obj = {glass2, panel2, door},
enter = function()
if q1 == 0 then q1 = 1; inv():add('st');end;
hp = hp - 1; if hp == 0 then walk('end5');end;
end,
};
door1 = obj{
nam = '_';
dsc = 'Все двери заблокированы. В углу есть {ворота}, ведущие в ремонтный отсек.';
act = function()
if q2 == 0 then p[[Внимание! Отсек разгерметизирован!
^Для устранения неполадок вставьте чип-ключ.]]; else walk('loc10'); end;
end;
used = function(s,w)
if w == key1 then hp = hp - 1; if hp == 0 then walk('end5');end;
q2 = 1; inv():del('key1'); p'Би-би. Процесс устранения неполадок завершен.'; end;
end;
};
blaster = obj{
nam = 'бластер';
inv = 'Бластер разряжен. Энергии хватит только на один выстрел.';
};
robo1 = obj{
nam = '_';
dsc = 'У стены лежит неисправный {робот}.';
act = function()
if q3 == 0 then p[[Нижняя часть робота полностью разъедена кислотой.
Правый манипулятор отсутствует.
В левом манипуляторе крепко зажат бластер. Вытащить не получается.]];
else p'Би-би. Прости, приятель.'; end;
end;
used = function(s,w)
if w == stone then q3 = 1; p[[Обломок метеорита с силой ударяет в корпус неисправного робота.
Манипулятор разжимается, высвобождая бластер. Робот забирает оружие себе.]];
hp = hp - 1; if hp == 0 then walk('end5');end;
inv():del('stone'); inv():add('blaster'); end;
if w == blaster then hp = hp - 1; if hp == 0 then walk('end5');end;
p'Робот стреляет из бластера. Ничего не происходит.'; inv():del('blaster'); end;
end;
};
loc7 = room {
nam = "Коридор. Сектор А";
pxa = {
{ if_("q2==0","door1","door1_open"), 10 },
{ "shaft", 250 },
{ if_("have(blaster)", "robot_nohand", "robot_nohand_blaster"), 395 }
};
obj = {door1, robo1,
vway("_", [[Небольшой проход уводит {вправо}.]], 'loc8'),
vway("_", [[Можно вернуться {назад}.]], 'loc6'),
},
enter = function()
hp = hp - 1; if hp == 0 then walk('end5');end;
end,
};
loc8 = room {
nam = "Коридор. Сектор B";
pxa = {
{ "door4", 60 },
{ "blood", 200 },
{ "door4", 310 }
};
obj = {
vway("_", [[Пол испачкан кровью. След тянется из отсека {К613}]], 'loc9'),
vway("_", [[в отсек {К614}.]], 'loc11'),
vway("_", [[На стене чернеют кислотные разводы. Можно вернуться {назад}.]], 'loc7'),
},
enter = function()
hp = hp - 1; if hp == 0 then walk('end5');end;
end,
};
cap1 = obj{
nam = '_';
dsc = 'В центре отсека установлена большая {криокапсула}.';
used = function(s,w)
if w == blaster then hp = hp - 1; if hp == 0 then walk('end5');end;
p'Робот стреляет из бластера. Ничего не происходит.'; inv():del('blaster'); end;
end;
act = 'Это отдельная капсула для элитных членов экипажа. ^Капсула пуста. На разбитом стекле есть следы крови.';
};
key = obj{
nam = '_';
dsc = 'На полу лежит оторванный {манипулятор}.';
act = function()
if q4 == 0 then
hp = hp - 1; if hp == 0 then walk('end5');end;
p[[Робот вынимает из манипулятора синий чип-ключ.
]]; inv():add('key1'); q4 = 1; else p'Би-би. Мне не нужен третий манипулятор.';end;
end;
used = function(s,w)
if w == blaster then hp = hp - 1; if hp == 0 then walk('end5');end;
p'Робот стреляет из бластера. Ничего не происходит.'; inv():del('blaster'); end;
end;
};
key1 = obj{
nam = 'чип-ключ';
inv = 'Синий чип-ключ высокого уровня допуска.';
};
loc9 = room {
nam = "Отсек К613";
pxa = {
{ "door2", 10 },
{ "panel", 210 },
{ "crio_blood", 300 }
};
obj = {cap1,key,
vway("_", [[Можно вернуться в {коридор}.]], 'loc8'),
},
enter = function()
hp = hp - 1; if hp == 0 then walk('end5');end;
end,
};
glass3 = obj{
nam = '_';
dsc = 'В центре стены размещен большой {иллюминатор}.';
act = 'Стекло разбито и закрыто снаружи стальной пластиной.';
used = function(s,w)
if w == blaster then hp = hp - 1; if hp == 0 then walk('end5');end;
p'Робот стреляет из бластера. Ничего не происходит.'; inv():del('blaster'); end;
end;
};
stone = obj{
nam = 'метеорит';
inv = 'Довольно крупный и тяжелый осколок метеорита.';
use = function(s,w)
if not (w == robo1) then hp = hp - 1; if hp == 0 then walk('end5');end;
inv():del('stone');p'Метеорит падает на пол и разбивается на части.'; end;
end;
};
repair = obj{
nam = '_';
dsc = 'В центре стоит ремонтный {модуль}.';
act = function()
if q5 == 0 then
hp = hp - 1; if hp == 0 then walk('end5');end;
p[[Ремонтный модуль сломан. Похоже, в него, разбив иллюминатор, врезался обломок метеорита.
Робот аккуратно достаёт его своими манипуляторами, но всё бесполезно. Модуль уже не починить.Что же делать?
]];
inv():add('stone'); q5 = 1; else p'Би-би. Что же делать? Смириться и ждать отключения?';end;
end;
used = function(s,w)
if w == blaster then hp = hp - 1; if hp == 0 then walk('end5');end;
p'Робот стреляет из бластера. Ничего не происходит.'; inv():del('blaster'); end;
end;
};
loc10 = room {
nam = "Ремонтный отсек";
pxa = {
{ "door1_open", 10 },
{ if_("q5==1","repair_broken", "repair_meteor"), 190 },
{ "window", 390 }
};
obj = {glass3, repair,
vway("_", [[Можно вернуться в {коридор}.]], 'loc7'),
},
enter = function()
hp = hp - 1; if hp == 0 then walk('end5');end;
end,
};
cap2 = obj{
nam = '_';
dsc = 'В центре отсека установлена большая {криокапсула}.';
act = 'В капсуле спит мужчина. Его лицо кажется очень знакомым. ^ Робот начинает узнавать в нём себя. Но как это возможно?';
used = function(s,w)
if w == blaster then inv():del('st'); inv():del('blaster'); walk('end1'); end;
end;
};
alien = obj{
nam = '_';
dsc = 'Её пытается разбить ужасный {мутант}.';
act = 'Это бывший член экипажа. Его руки превратились в острые клешни, из головы высовываются мерзкие щупальца. Похоже, он заразился инопланетным вирусом.';
used = function(s,w)
if w == blaster then inv():del('blaster');inv():del('st'); walk('end2'); end;
end;
};
loc11 = room {
nam = "Отсек К614";
pxa = {
{ "crio", 10 },
{ "mutant", 210 }
};
obj = {cap2,alien,
vway("a1", [[Можно убежать в {коридор}.]], 'loc12')
},
enter = function()
hp = hp - 1; if hp == 0 then walk('end5');end;
end,
};
next1 = obj{
nam = '_';
dsc = [[Робот стреляет из бластера. Капсула взрывается. Мутанта разрывает на части.
Робот смотрит на своё мертвое тело в капсуле и ждёт отключения. Вскоре сигнал пропадает.
^^{Далее}]];
act = function(s,w)
hp = 31; q1 = 0; q2 = 0; q3 = 0; q4 = 0; q5 = 0; walk('loc6');
end;
};
remove_objs=function()
inv():del('blaster');
inv():del('stone');inv():del('st');inv():del('key1');
end
end1 = room {
nam = "Эпилог";enter=remove_objs;
obj = {next1,
},
};
next2 = obj{
nam = '_';
dsc = [[Робот стреляет из бластера. Раненый мутант, разбрызгивая кислоту, быстро приближается
к роботу и мощным ударом разрубает его на части. Человек в капсуле внезапно открывает глаза и кричит.
Настоящий кошмар только начинается. ^^{Далее}]];
act = function(s,w)
hp = 31; q1 = 0; q2 = 0; q3 = 0; q4 = 0; q5 = 0; walk('loc6');
end;
};
end2 = room {
nam = "Эпилог";enter=remove_objs;
obj = {next2,
},
};
loc12 = room {
nam = "Коридор. Сектор B";
pxa = {
{ "door4", 60 },
{ "blood", 200 },
{ "door4", 310 }
};
obj = {vway("a1", [[Мутант замечает робота и бросается в погоню.
Стараясь увести монстра как можно дальше от криокапсул, робот возвращается в свой отсек.
Наступает решающий момент. {Би-би}!]], 'loc13')
},
enter = function()
hp = hp - 1; if hp == 0 then walk('end5');end;
end,
};
alien1 = obj{
nam = '_';
dsc = 'К роботу медленно приближается {мутант}, отрезая все пути к отступлению.';
act = function() inv():del('blaster');inv():del('st');inv():del('stone');
walk('end3');
end;
used = function(s,w)
if w == blaster then inv():del('blaster');inv():del('st'); walk('end2'); end;
end;
};
glass4 = obj{
nam = '_';
dsc = 'В стене открыт огромный {иллюминатор}.';
act = 'Стекло кажется прочным. За ним холод и бесконечная тьма.';
used = function(s,w)
if w == blaster then inv():del('blaster');inv():del('st'); walk('ending'); end;
end;
};
loc13 = room {
nam = "Отсек кибер-крионики";
pxa = {
{ "window", 10 },
{ "panel", 70 },
{ "mutant", 160 },
{ "door1", 370 }
};
obj = {alien1, glass4,
},
enter = function()
hp = hp - 1; if hp == 0 then walk('end5');end;
end,
};
next3 = obj{
nam = '_';
dsc = [[Разъярённый мутант, разбрызгивая кислоту, быстро приближается
к роботу и мощным ударом разрубает его на части. В это время человек в капсуле
внезапно открывает глаза и кричит. Настоящий кошмар только начинается.
^^{Далее}]];
act = function(s,w)
hp = 31; q1 = 0; q2 = 0; q3 = 0; q4 = 0; q5 = 0; walk('loc6');
end;
};
end3 = room {
nam = "Эпилог";enter=remove_objs;
pxa = {
{ "mutant", 172 }
};
obj = {next3,
},
};
next4 = obj{
nam = '_';
dsc = [[
Робот стреляет из бластера. Иллюминатор разбивается, впуская внутрь тьму.
Вакуум засасывает робота наружу. Оказавшись в открытом космосе, робот печально смотрит вслед удаляющемуся кораблю.
Затем сигнал пропадает. ^^{Далее}]];
act = function(s,w)
hp = 31; q1 = 0; q2 = 0; q3 = 0; q4 = 0; q5 = 0; walk('loc6');
end;
};
end4 = room {
nam = "Эпилог";enter=remove_objs;
obj = {next4,
},
};
next5 = obj{
nam = '_';
dsc = [[
Батарея робота окончательно выходит из строя. Сигнал пропадает.
^^{Далее}]];
act = function(s,w)
hp = 31; q1 = 0; q2 = 0; q3 = 0; q4 = 0; q5 = 0; walk('loc6');
end;
};
end5 = room {
nam = "Эпилог";
pxa = {
{ "robot", 212 }
};
obj = {next5,
},
enter=remove_objs
};
ending = room {
nam = "Финал",
enter = function() mute_()(); complete_("meteor")(); end,
dsc = [[Робот стреляет из бластера. Иллюминатор разбивается вдребезги, впуская внутрь тьму.
Вакуум засасывает мутанта наружу. Робот не успевает ухватиться за поручни и летит за ним следом.
Оказавшись в открытом космосе, робот печально смотрит вслед удаляющемуся кораблю.
Перед тем, как отключиться, он думает о том, что исполнил свой долг сполна, и надеется, что
следующий робот проведет свою вахту без серьезных происшествий. Затем сигнал пропадает.
А на лице мужчины, спящего в капсуле, появляется спокойная улыбка.]],
act = gamefile_("robot.lua"),
obj = { vobj("next", txtc("^{Продолжение...}")) }
}