302 lines
12 KiB
Lua
302 lines
12 KiB
Lua
-- $Name: Пробуждение$
|
||
instead_version "1.9.1"
|
||
require "lib"
|
||
require "para"
|
||
require "dash"
|
||
require "quotes"
|
||
game.use = "Нет, так ничего не выйдет."
|
||
|
||
main = room {
|
||
nam = "...",
|
||
enter = music_("spookyloop",0),
|
||
title = {"П", "Р", "О", "Б", "У", "Ж", "Д", "Е", "Н", "И", "Е"},
|
||
num =15,
|
||
act = function() walk(room1) end,
|
||
dsc = [[Я слышал об этом, но никогда не верил, что это действительно может произойти.
|
||
Говорят, что есть один шанс из миллиона, что человек не сможет проснуться после криосна.
|
||
Тело его просыпается, но разум остаётся где-то там -- в чёрной космической безде.
|
||
Сохраняются только основные инстинкты.^
|
||
Я слышал об этом, но никогда не верил, что это может действительно произойти.]],
|
||
obj = { vobj("next", '{Начать игру}') }
|
||
}
|
||
|
||
room1 = room {
|
||
nam = "К007",
|
||
pxa = {
|
||
{ "crio", 10 },
|
||
{ "med", 310 },
|
||
{ "door4", 370 }
|
||
},
|
||
enter = function()
|
||
if room1_neibor._zombi then
|
||
p (_("Нет, туда пути больше нет."));
|
||
return false
|
||
end
|
||
end,
|
||
dsc = "Я в крио-отсеке. Сложно поверить в то, что я спал больше тысячи лет. Кажется, только вчера мы улетели с Земли.",
|
||
obj = { "room1_capsulas", "room1_neibor", "room1_door", "room1_med" },
|
||
way = { "coridor" }
|
||
}
|
||
|
||
room1_capsulas = obj {
|
||
nam = "капсулы",
|
||
dsc = "Здесь {шесть капсул}, но отключаются они постепенно. Сейчас отключилась только моя и моего соседа справа.",
|
||
act = "Стандартные капсулы для криосна."
|
||
}
|
||
|
||
room1_neibor = obj {
|
||
nam = "сосед",
|
||
dsc = function(s)
|
||
if room1_neibor._zombi then
|
||
return (_("{Александр} слепо наступает на меня, издавая странный тяжёлый хрип."));
|
||
else
|
||
return (_("Я его почти не знаю. Но, кажется, его зовут {Александр}. Он плохо выглядит -- сидит и неподвижно смотрит в одну точку."));
|
||
end
|
||
end,
|
||
act = function(s)
|
||
if room1_neibor._zombi then
|
||
return (_("Уговоры не помогут, я должен спасаться бегством!"));
|
||
else
|
||
return (_("Он никак на меня не реагирует -- просто смотрит в одну точку. Надо бы ему помочь."))
|
||
end
|
||
end
|
||
}
|
||
|
||
room1_door = obj {
|
||
nam = "дверь",
|
||
dsc = "На стене у {двери}",
|
||
act = function()
|
||
if room1_neibor._zombi then
|
||
return (_("Дверь не закрыта. Нужно бежать отсюда!"));
|
||
else
|
||
return (_("Выход из крио-отсека, в коридор. Но уходить пока рано, надо бы помочь Александру."))
|
||
end
|
||
end
|
||
}
|
||
|
||
room1_med = obj {
|
||
nam = "аптечка",
|
||
dsc = "висит {аптечка}.",
|
||
act = function(s)
|
||
if not adrenalin._taken then
|
||
take(adrenalin);
|
||
adrenalin._taken = true;
|
||
return (_("Я нашёл в аптечке шприц с адреналином. Надо сделать инъекцию Александру."));
|
||
else
|
||
return (_("Здесь больше нет ничего, что мне было бы нужно."));
|
||
end
|
||
end
|
||
}
|
||
|
||
adrenalin = obj {
|
||
nam = "шприц",
|
||
inv = "Одноразовый шприц с порцией адреналина. Некоторым при выходе из крио-сна это нужно.",
|
||
use = function(s,v)
|
||
if v == room1_neibor then
|
||
remove(s,me());
|
||
room1_neibor._zombi=true;
|
||
return [[Я делаю Александру инъекцию, он странно вздрагивает, смотрит на меня мутными ничего не
|
||
выражающими глазами, а потом вдруг мощным ударом отшвыривает меня к двери. Не может быть!
|
||
Он не в себе! Я кричу Александру, пытаюсь остановить его, но он как будто не слышит и
|
||
продолжает наступать на меня, вытянув вперёд руки.]];
|
||
end
|
||
end
|
||
}
|
||
|
||
coridor = room {
|
||
nam = "Коридор",
|
||
pxa = {
|
||
{ if_("armoryobj._open","door1_open","door1"), 10 },
|
||
{ "door2", 200 },
|
||
{ if_("not zombi._dead","zombi", "zombi_dead"), if_("not zombi._dead", 420, 380) },
|
||
{ if_("not zombi._dead","hatch2", "hatch"), 460 }
|
||
},
|
||
enter = function()
|
||
if not room1_neibor._zombi then
|
||
p (_("Надо бы сначала помочь Александру."));
|
||
return false;
|
||
end
|
||
end,
|
||
dsc = "Я в коридоре крио-блока.",
|
||
obj = { "lock", "zombi", "elevator", "cleaner", "armoryobj", "codereader" },
|
||
way = { "room1", vroom("Лифт","goodend"), "armory" }
|
||
}
|
||
|
||
zombi = obj {
|
||
nam = "Александр",
|
||
dsc = function(s,v)
|
||
if zombi._dead then
|
||
return (_("На полу лежит труп {Александра}. Дверь разрубила его тело попалам. Весь пол залит кровью."));
|
||
else
|
||
return (_("{Александр} идёт прямо на меня. В глазах его горит безумие."));
|
||
end
|
||
end,
|
||
act = function(s,v)
|
||
if zombi._dead then
|
||
return (_("Очень жаль, что мне пришлось сделать это. Но у меня не было другого выхода."));
|
||
else
|
||
return (_("Это синдром выхода из криосна. Теперь в этом нет сомнений! Боюсь, ему уже не помочь..."))
|
||
end
|
||
end
|
||
}
|
||
|
||
lock = obj {
|
||
nam = "Замок",
|
||
dsc = "На стене у двери в К007 висит {панель} электронного замка.",
|
||
act = function(s)
|
||
if zombi._dead then
|
||
return (_("Замок разворочен выстрелом."));
|
||
else
|
||
return (_("Александр уже вышел из комнаты, я не смогу его там закрыть."));
|
||
end
|
||
end
|
||
}
|
||
|
||
elevator = obj {
|
||
nam = "Лифт",
|
||
dsc = "Справа от меня -- {лифт}.",
|
||
act = function(s)
|
||
if zombi._dead then
|
||
return (_("Лифт уже стоит на этаже. Надо лишь подойти к двери лифта."));
|
||
end
|
||
if s._call then
|
||
return (_("Я уже вызвал лифт. Вряд ли я смогу как-то ускорить его прибытие."));
|
||
else
|
||
s._call=true;
|
||
return (_("Я нажимаю на кнопку вызова лифта. Теперь остаётся ждать. Но у меня нет времени! Александр сошёл с ума и идёт прямо на меня!"));
|
||
end
|
||
end
|
||
}
|
||
|
||
cleaner = obj {
|
||
nam = "Швабра",
|
||
dsc = "На полу валяется сломанная {швабра}.",
|
||
inv = function(s,v)
|
||
if zombi._dead then
|
||
return (_("Не думаю, что мне это теперь пригодится."));
|
||
else
|
||
return (_("Вряд ли из неё получится хорошее оружие. Но кто знает..."))
|
||
end
|
||
end,
|
||
tak = "Я поднял швабру.",
|
||
use = function(s,v)
|
||
if v==zombi then
|
||
if zombi._dead then
|
||
return (_("Он и так мёртв."));
|
||
else
|
||
return walk(badend);
|
||
end
|
||
end
|
||
end
|
||
}
|
||
|
||
armoryobj = obj {
|
||
nam = "Оружейная",
|
||
dsc = "Слева -- вход в {оружейную}.",
|
||
act = function(s)
|
||
if s._exam then
|
||
if s._open then
|
||
return (_("Дверь открыта."));
|
||
else
|
||
return (_("У меня должен быть допуск."));
|
||
end
|
||
else
|
||
s._exam=true;
|
||
return (_("Рядом с дверью висит сканер ретины. У меня должен быть допуск в оружейную."));
|
||
end
|
||
end
|
||
}
|
||
|
||
codereader = obj {
|
||
nam = "Сканер ретины",
|
||
dsc = "Рядом со входом в оружейную висит {сканер ретины}.",
|
||
act = function(s)
|
||
if armoryobj._open then
|
||
return (_("Дверь уже открыта."));
|
||
else
|
||
armoryobj._open=true;
|
||
return (_("Я смотрю в окуляры сканера. Проходит долгая секунда. Наконец, дверь открывается."));
|
||
end
|
||
end,
|
||
cnd = function() return armoryobj._exam end
|
||
}
|
||
|
||
armory = room {
|
||
nam = "Оружейная",
|
||
pxa = {
|
||
{ "door1_open", 10 },
|
||
{ if_("not have(knife)", "knife"), 150 },
|
||
{ if_("not have(blaster)","blaster"), 180 },
|
||
{ "box", 180 },
|
||
{ "box", 280 },
|
||
{ "box", 380 },
|
||
},
|
||
enter = function(s)
|
||
if not armoryobj._open then
|
||
p (_("Дверь в оружейшую закрыта."));
|
||
return false;
|
||
elseif zombi._dead then
|
||
p (_("Мне туда больше не нужно."));
|
||
return false;
|
||
end
|
||
end,
|
||
dsc = "Я в оружейной.",
|
||
obj = { "knife", "blaster" },
|
||
way = { "coridor" }
|
||
}
|
||
|
||
blaster = obj {
|
||
nam = "Бластер",
|
||
dsc = "Чуть дальше висит {бластер}.",
|
||
tak = "Я взял бластер.",
|
||
use = function(s,v)
|
||
if v==zombi then
|
||
return (_([[Я пытаюсь выстрелить в Александра, но в ответ мне раздаётся неприятный гудок, и на дисплее оружия высвечивается надпись: "Идентифицирован член экипажа. Выстрел отменён."]]));
|
||
elseif v==lock then
|
||
sound_("shoot_lazer")();
|
||
p (_("Я выстрелил в замок, дверь в К007 опустилась и разрубила Александра попалам. Ужасно! Но у меня не было выхода.^После того как тело Александра упало на пол, я услышал мелодичный звонок. На этаж пришёл лифт."));
|
||
zombi._dead=true;
|
||
else
|
||
return (_("Это не поможет."));
|
||
end
|
||
end
|
||
}
|
||
|
||
knife = obj {
|
||
nam = "Нож",
|
||
dsc = "У двери висит {нож-пила}.",
|
||
tak = "Я беру нож-пилу.",
|
||
use = function(s,v)
|
||
if v==zombi then
|
||
if zombi._dead then
|
||
return (_("Он и так мёртв."));
|
||
else
|
||
return walk(badend);
|
||
end
|
||
end
|
||
end
|
||
}
|
||
|
||
badend = room {
|
||
nam = "Конец",
|
||
dsc = [[Я пытаюсь ударить Александра, но он как будто не чувствует удара. В ответ он с нечеловеческой силой отшвыривает меня
|
||
к стене. Я падаю и проваливаюсь в темноту...]]
|
||
}
|
||
|
||
goodend = room {
|
||
nam = "Конец",
|
||
enter = function(s)
|
||
if not zombi._dead then
|
||
p (_("Лифта ещё нет на этаже."));
|
||
return false;
|
||
end
|
||
mute_()();
|
||
complete_("wake")();
|
||
end,
|
||
dsc = [[Я подхожу к лифту, дверь открывается и...^
|
||
Передо мной оказывается какой-то человек с мутным невидящим взглядом. Не может быть! Ещё один! Руки безумца тянутся ко мне. Я застываю от ужаса, будучи не в силах даже пошевелиться.]],
|
||
act = gamefile_("wake2.lua"),
|
||
obj = { vobj("next", txtc("{КОНЕЦ?}")) }
|
||
}
|
||
|