insteadose-3/meteor.lua

489 lines
19 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: Пояс астероидов$
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("^{Продолжение...}")) }
}