insteadose-3/wake.lua

302 lines
12 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 "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("{КОНЕЦ?}")) }
}