This repository has been archived on 2019-04-06. You can view files and clone it, but cannot push or open issues or pull requests.
adventin/games/cat/ep3.lua

1643 lines
68 KiB
Lua
Raw Normal View History

2009-02-21 12:52:44 +02:00
lection = room {
nam = 'Лекция Белина',
pic = 'gfx/lection.png',
dsc = [[Я пробираюсь к месту и сажусь... Отсюда хорошо слышно -- послушаем именитого физика... -- Думаю я... ^^Итак, в ноябре 1935г. Шредингер опубликовал статью,
в которой проводился следующий мысленный эксперимент -- продолжал Белин --
в чем суть эксперимента? -- С этими словами Белин вытащил и поставил на стол
ящик странного вида -- Люблю опыты -- белоснежная улыбка тускло блеснула в свете ламп --
Как вы можете видеть это ящик -- Белин похлопал ладонью
по гладкой поверхности. -- В ящик встроена капсула с ядовитым газом
Кроме того, в статико-динамическом поле ящика находятся счетчик радиации,
изотопный элемент и таймер. Параметры эксперимента подобраны так, что вероятность того, что ядро распадётся за 1 час, составляет 50%.^^
Если ядро распадается, оно приводит механизм в действие, он открывает ёмкость с газом. --
Пока все просто -- не так ли, господа? -- Улыбается Белин -- но дело в том,
что Шредингер в своем эксперименте помещает в ящик кота -- живое существо. ^^
Согласно квантовой механике, если над ядром не производится наблюдения, то его состояние описывается суперпозицией (смешением) двух состояний распавшегося ядра и нераспавшегося ядра, следовательно, кот, сидящий в ящике, и жив, и мёртв одновременно. -- Белин повышает голос. -- можно сказать, что это просто игры разума, отвлеченная лирика, но я покажу и докажу, что это не совсем так... ^^
2009-08-26 08:25:53 +03:00
-- Итак, если ящик открыть, то экспериментатор обязан увидеть только какое-нибудь одно конкретное состояние — <<ядро распалось, кот мёртв>> или <<ядро не распалось, кот жив>>. Сам Шредингер думал, что его парадокс доказывает несостоятельность квантовой механики, но мы то с вами знаем, что квантовая механика и есть истинное представление о нашем мире -- снова повышает тон голоса Белин -- и вот, независимо друг от друга, что доказывает отчасти истинность предположения -- Ганс Моравек в 1987 и Бруно Маршал в 1988 рассмотрели ситуацию с точки зрения самого кота!^^
2009-02-21 12:52:44 +02:00
-- Если верна многомировая интерпретация Эверетта, то в результате каждого проведенного эксперимента с котом вселенная расщепляется на две вселенных, в одной из которых кот остается жив, а в другой погибает. В мирах, где кот умирает, он перестает существовать. Напротив, с точки зрения неумершего кота, эксперимент будет продолжаться, не приводя к исчезновению кота. Это происходит потому, что в любом ответвлении кот способен наблюдать результат эксперимента лишь в том мире, в котором он выживает. И если многомировая интерпретация верна, то кот может заметить, что он никогда не погибнет в ходе эксперимента... -- Белин замолкает и осматривает зал... ^^
-- Но что вытекает из этого, господа? Я спрашиваю, что из этого вытекает? -- Представим, что участник эксперимента взрывает ядерную бомбу вблизи себя. С точки зрения многомировой интерпретации, практически во всех параллельных вселенных ядерный взрыв уничтожит участника. Но несмотря на это, должно существовать небольшое множество альтернативных вселенных, в которых участник каким-либо образом выживает. И мы переходим к идее -- Белин снова поднял голос -- идее квантового бессмертия!!! ^^
-- Идея квантового бессмертия состоит в том, что участник остаётся в живых, и тем самым способен воспринимать окружающую реальность, по меньшей мере в одной из вселенных в множестве, пусть даже количество таких вселенных пренебрежимо мало в сравнении с количеством всех возможных вселенных. Таким образом, со временем участник обнаружит, что он может жить вечно!!! ^^
Мы все с вами тяжело работали этот год, под четким руководством... -- тут Белин бросил взгляд в сторону портретов -- и должен вам сказать, что информации в нашем информационном центре -- Белин посмотрел в потолок -- достаточно, чтобы доказать, я повторяю, научно доказать теоретически и экспериментально истинность многомировой интерпретации... -- Но что это значит для нас? -- Вы не можете этого видеть, но -- Белин смотрит на часы -- уже через несколько минут состав с ураном прибывает к задним воротам института... Урана хватит для того, чтобы обеспечить каждого из вас ядерной бомбой. Так как вы скоро убедитесь в том, что квантовое бессмертие это реальность, то каждый из нас сможет стать непобедимым террористом!!! Вселенная расщепится на множество миров, в каждом из который Вы -- палец Белина указывает в зал -- будете его диктатором и господином!!! -- Белин почти кричал...^^
2009-08-26 08:25:53 +03:00
Зал не выдержал и взревел. Люди вставали и хлопали... Их глаза горели каким-то бешеным огнем... О Боже, -- подумал я -- это какое-то наваждение... Мои ноги не слушались меня -- я сидел на своем месте и не мог пошевелиться...^^
2009-02-21 12:52:44 +02:00
Но я отвлекся -- говорит Белин -- продолжим наш опыт. С этими словами он достал из под стола живой комочек... Это был мой Барсик... -- Сейчас я помещу эту кошку в ящик и мы с вами... -- красная пелена застилает мои глаза...
]],
enter = function(s)
-- end of episode 2
eside = nil;
moika = nil;
eating = nil;
kitchen = nil;
stolcorridor = nil;
entrance = nil;
floor2 = nil;
eroom = nil;
room33 = nil;
room3x = nil;
cor3 = nil;
toilet3 = nil;
floor3 = nil;
toilet = nil;
toiletw = nil;
room4x = nil;
room46 = nil;
hall42 = nil;
hall41 = nil;
floor4 = nil;
floor5 = nil;
povardlg = nil;
kitchendlg = nil;
facectrl = nil;
end,
act = function(s, w)
if w == 1 then
set_music("mus/under.s3m");
return goto('escape1');
end
end,
obj = {
2009-08-26 08:25:53 +03:00
vobj(1, 'дальше', '{Дальше}.'),
2009-02-21 12:52:44 +02:00
};
};
profdlg = dlg {
nam = '!!!',
pic = 'gfx/me.png',
2009-08-26 08:25:53 +03:00
dsc = 'Я собираюсь с силами, встаю и во всю глотку кричу...',
2009-02-21 12:52:44 +02:00
obj = {
[1] = phr('Это кот, а не кошка!',
'-- Рука Белина останавливается -- его взгляд фокусируется на мне -- он узнает меня!! -- Охрана -- в зале посторонний!!! Убе... Уберите его!!! -- кричит он..',
[[poff(2);escape1.obj:add('guardian')]]),
[2] = phr('Не трогай моего кота!',
'-- Белин замирает, затем смотрит мне прямо в глаза -- его лицо выражает удивление -- Охрана!!! Охрана!!! В зале посторонний!!!',
[[poff(1);escape1.obj:add('guardian')]]),
},
};
profdlg2 = dlg {
nam = 'Белин',
pic = 'gfx/prof2.png',
dsc = 'Белин бледен. Он смотрит на дробовик рассеянным взглядом.',
obj = {
[1] = phr('Я пришел за своим котом.',
'Я выхватываю Барсика из руки Белина и засовываю себе за пазуху.',
[[inv():add('mycat'); lifeon('mycat')]]),
[2] = phr('Скажи им, что бы расходились!!!',
'-- Белин бледен, похоже он не понимает меня..',
[[pon(3)]]),
[3] = _phr('Ну же!!! Скажи им, чтобы расходились...', 'Я трясу его. Белин не чувствует, он лишь смотрит на черные стволы дробовика.',[[pon(3); back();]]);
},
};
gdlg1 = dlg {
nam = 'охранник',
pic = 'gfx/guard42.png',
dsc = 'Я кричу охраннику и не узнаю свой голос...',
obj = {
[1] = phr('Положи свое ружье прикладом вперед на стол и толкни его сюда..',
'Охранник неуверенно смотрит на меня..',
[[pon(2)]]),
2009-08-26 08:25:53 +03:00
[2] = _phr('Я сказал на стол ружье!!! -- я посильнее надавливаю стволами на Белина -- он близок к обмороку.', 'Охранник осторожно кладет помповое ружье на стол и толкает его ко мне... -- я быстро забираю ружье. Теперь в левой руке у меня обрез, в правом -- помповое ружье.',
2009-02-21 12:52:44 +02:00
[[pon(3); inv():add('shotgun')]]),
[3] = phr('Не нравилось тебе мое лицо да?? Дааа???',
'Охранник молчит, на его лбу выступает пот...',
[[pon(3); back();]]),
};
};
shotgun = obj {
nam = 'ружье',
inv = 'Помповое ружье... На 6 зарядов. Интересно, сколько там осталось?',
dsc = 'На полу валяется помповое {ружье}.',
tak = function(s)
if s._unloaded then
return 'Оно мне больше не нужно. Полностью разряжено.', false
end
return 'Я беру свое ружье обратно.';
end,
};
guardian = obj {
nam = 'охранник',
dsc = function(s, w)
if not professor._gun then
return 'Я вижу как {охранник} с помповым ружьем медленно, но верно пробирается к моему месту.';
end
if have('shotgun') then
return 'Я вижу обезоруженного {охранника}, внимательно смотрящего на меня.';
end
return 'Я вижу {охранника}, неуверенно держащего в руках помповое ружье.';
end,
act = function(s, w)
if not professor._gun then
return 'Скоро он доберется до меня...';
end
return goto('gdlg1');
end,
used = function(s, w)
if w == 'shotgun' then
return 'Нет, я не могу пойти на это...';
end
if w == 'gun' then
if not professor._gun then
return 'Мой обрез не для дальнего боя...';
end
return 'Я опасаюсь отводить обрез от Белина, к тому же, потом мне придется его перезаряжать...';
end
end
};
professor = obj {
nam = 'Белин',
dsc = function(s, w)
if not s._gun then
return 'Перед доской стоит {Белин} и держит в руке моего Барсика.';
end
return 'Я упираюсь обоими стволами дробовика в грудь {Белина}.';
end,
act = function(s)
if not s._gun then
return goto('profdlg');
end
return goto('profdlg2');
end,
used = function(s, w)
if w == 'gun' then
if s._gun then
return 'Я еще сильнее надавливаю обоими стволами на грудь Белина.';
end
s._gun = true;
objs():add('guardian');
gun._hidden = false;
2009-08-26 08:25:53 +03:00
return 'Я достаю обрез из-под одежды и, перепрыгивая через стол, бросаюсь к Белину.';
2009-02-21 12:52:44 +02:00
end
end,
};
pdlg = dlg {
nam = 'люди',
pic = 'gfx/me.png',
dsc = 'Я смотрю в зал и кричу...',
obj = {
[1] = phr('Вас обманывают!!! Никакого доказательства нет!!!',
'-- никакой реакции...',[[pon(2)]]),
[2] = _phr('Мир един!!! Каждый из вас знает об это с детства!!! Уходите от сюда!! Бегите от этих сектантов!!!', ' -- ответом мне было молчание...'),
[3] = phr('Стадо баранов!!! Неужели вас так легко обмануть???',
'-- они молчат -- и мне не нравится их взгляды...',
[[pon(3); back();]]),
},
};
narod = obj {
nam = 'люди',
dsc = function(s)
if not professor._gun then
if seen('guardian') then
return '{Люди} в зале смотрят на меня с недоумением. Они в замешательстве.';
end
return '{Люди} в зале следят за Белиным.';
end
return '{Люди} в зале замерли. Они не спускают с меня взгляд. Если я ошибусь -- мне конец... И всему миру...';
end,
act = function(s)
if professor._gun then
return goto('pdlg');
end
if seen('guardian') then
return 'Пока они на меня не бросились и это хорошо...';
end
return 'Фанатики, они фанатики...';
end,
used = function(s, w)
if w == 'gun' or w =='shotgun' then
return 'Я думаю, что патронов не хватит.';
end
return 'Увы...';
end
};
win = obj {
nam = 'окно',
dsc = function(s)
local st = '';
if s._broken then
st = ' Одно из окон разбито.';
end
return 'Три широких {окна} выходят на запад.'..st;
end,
act = 'За окнами тьма... Только белые снежинки изредка попадают в зону освещения флоуресцентных ламп.';
used = function(s, w)
if w ~= 'gun' and w ~= 'shotgun' then
return 'Не поможет...';
end
if s._broken then
return 'Уже разбито...';
end
if not have('shotgun') then
return 'Охранник подстрелит меня..';
end
s._broken = true;
ways():add('window');
return 'Я разбиваю прикладом ближайшее окно...';
end
};
escape1 = room {
nam = 'Зал 2',
dsc = 'Я нахожусь в зале. Люди в зале ждут продолжения эксперимента.',
pic = function()
if professor._gun then
return 'gfx/meandgun.png';
end
return 'gfx/lection2.png';
end,
obj = {
'win',
vobj(4, 'лампы', 'Зал освещают флоуресцентные {лампы}.'),
'professor',
'narod',
vobj(5, 'ящик', 'На столе стоит {ящик}.'),
'portrait',
},
act = function(s, w)
if w == 5 then
return 'Проклятая коробка...';
end
if w == 4 then
return 'Шесть ламп... Ненавижу этот мерцающий свет...';
end
end,
used = function(s, w, ww)
if ww == 'gun' or ww == 'shotgun' then
if not professor._gun then
return 'Не стоит...';
end
if w == 4 then
return 'Темнота поможет не только мне, но и им... А их больше...';
end
if w == 5 then
return 'Там яд. Я боюсь навредить моему Барсику.';
end
end
end,
exit = function(s, t)
if t == 'window' and not have('mycat') then
return 'А как же Барсик?', false
end
if t == 'cor4' then
return 'Я должен что-то сделать сейчас же!', false;
end
end,
way = { 'cor4' },
};
lest = obj {
nam = function(s, w)
if s._seen then
return 'лестница';
else
return 'нечто';
end
end,
dsc = function(s, w)
if s._seen then
return 'За метелью я едва различаю пожарную {лестницу}!';
end
return 'За метелью я едва различаю контуры какой-то {конструкции}.';
end,
act = function(s, w)
if not s._seen then
ways():add('ladder');
s._seen = true;
return 'Это же пожарная лестница!!!';
end
2009-08-26 08:25:53 +03:00
return 'Прыгать или нет? Вот в чем вопрос...';
2009-02-21 12:52:44 +02:00
end,
};
window = room {
nam = function(s)
if here() == window then
return 'на подоконнике';
end
return 'в окно';
end,
pic = 'gfx/fromwin1.png',
2009-08-26 08:25:53 +03:00
enter = "Это безумие, но все же я бросаюсь к окну... За спиной я слышу рев толпы...";
2009-02-21 12:52:44 +02:00
dsc = 'Я стою на подоконнике и всматриваюсь в ночную пустоту.',
obj = {
'lest',
},
exit = function(s, t)
if t == 'escape1' then
return 'Мне нельзя назад... Там толпа фанатиков...', false;
end
end,
way = { 'escape1',},
};
down = room {
nam = 'вниз';
};
window5 = obj {
nam = 'окно',
dsc = function(s, w)
if s._broken then
return 'Слева от меня, разбитое {окно}.';
end
return 'Слева от меня желтый огонек {окна}.';
end,
act = function(s)
if not s._broken then
return 'Окно закрыто...';
end
return goto('room5');
end,
used = function(s, w)
if w == 'gun' or w == 'shotgun' then
if s._broken then
return 'Уже разбито...';
end
s._broken = true;
return 'Я выбиваю стекло прикладом... Осколки стекла падают в темноту...';
end
end
};
up = room {
_num = 0;
nam = 'наверх',
enter = function(s, w)
s._num = s._num + 1;
if s._num == 2 then
lifeon('ladder');
2009-08-26 08:25:53 +03:00
return 'Внезапно, ночную тьму разрезает луч прожектора и тишину нарушает вой сирены... Похоже, внизу меня заметили...', false;
2009-02-21 12:52:44 +02:00
end
if s._num > 4 then
ladder.way:del('up');
ladder.obj:add('window5');
end
return 'Я медленно ползу вверх...', false;
end
};
ladder = room {
nam = 'лестница',
pic = 'gfx/ladder.png',
dsc = [[Я стою на холодной лестнице. Ледяные иголки снежинок больно ударяются о мое лицо.]],
act = function(s, w)
if w == 1 then
return 'Я скоро окоченею... Надо двигаться..';
end
end,
obj = {
vobj(1, 'поручни', 'В моих руках, железные {поручни}.'),
};
enter = function(s)
inv():del('gun');
return [[Я разбегаюсь и прыгаю... Несколько секунд мое сердце сжимается, но я чувствую тепло Барсика за пазухой и уже в следующий миг мои руки хватаются за черную сталь... Дробовик срывается с моего плеча и летит вниз...]];
end,
way = { 'up', 'down' },
life = function(s)
if rnd(2) == 1 then
return 'Я слышу треск автоматных очередей -- несколько пуль проходят совсем рядом...';
end
end,
exit = function(s, t)
if t == 'down' then
if s._shoot then
return 'Меня убьют... И Барсика... И разрушат весь мир...', false;
end
lifeon('ladder');
s._shoot = true;
return 'Я начинаю спускаться вниз, когда ночную тьму вдруг разрезает луч прожектора и тишину нарушает вой сирены... Похоже, внизу меня заметили...', false;
end
if t ~= 'up' then
lifeoff('ladder');
end
end
};
hand = obj {
nam = 'кровавая рука',
inv = 'Моя рука кровоточит... Мне кажется, что скоро я потеряю сознание...',
life = 'Капли крови падают с моей правой руки на пол...',
used = function(s, w)
if w == 'galstuk' then
inv():del('galstuk');
inv():del('hand');
lifeoff('hand');
return 'Я перевязываю руку галстуком... Пока сойдет...';
end
end
};
computers = obj {
nam = 'компьютеры',
dsc = 'Большую площадь занимают высокие стойки с компьютерным {оборудованием}. Тихое жужжание вентиляторов едва слышно. Нервно подмигивают лампочки сетевого оборудования.';
act = function(s)
if kover._fire then
return 'Ну что же... Гори, зло, гори!!! Пора выбираться отсюда.';
end
return 'Это оборудование хранит зло... Мне нужно уничтожить все это, но как? Из своего прошлого я знаю, что самый надежный способ уничтожить информацию на магнитных носителях -- провести ее через точку Кюри, другими словами -- сжечь это все к чертям собачьим... Но где мне взять огонь?';
end,
used = function(s, w)
if w == 'shotgun' then
return 'Расстрелять серверы? Ненадежно... Я должен сжечь это зло...';
end
end
};
poroh = obj {
nam = 'порох',
inv = 'Этот порох должен мне помочь.',
};
trut = obj {
nam = 'трут',
inv = 'Кусок газеты с порохом. Да это же трут!!!',
use = function(s, w)
if w == 'ibp' and ibp._knife and not ibp._trut then
ibp._trut = true;
inv():del('trut');
return 'Я кладу трут на ИБП.';
end
end
};
fire = obj {
nam = 'огонь',
inv = 'Бумажка быстро горит... Надо что-то делать!!!',
use = function(s, w)
if w == 'poroh' then
return 'Рванет прямо в руке.';
end
if w == 'news' then
return 'Я отрываю еще кусок от газеты. Пламя перекидывается на него.';
end
inv():del('fire');
if w ~= 'kover' then
return 'Бумага догорает и гаснет...';
end
if kover._fire then
return 'Я кидаю бумажку на горящий ковер...';
end
kover._fire = true;
2009-08-26 08:25:53 +03:00
return 'Я кладу бумагу на ковер... Волоски ковра вспыхивают... Похоже, начинается пожар..';
2009-02-21 12:52:44 +02:00
end
};
ibp = obj {
nam = 'ИБП',
dsc = 'Один разобранный {ИБП} валяется на полу.',
inv = function(s)
if not s._knife then
return 'Это источник бесперебойного питания. Что мне с ним делать?';
end
local st = '';
if s._trut then
st = ' На батарее лежит бумага с порохом.';
end
return 'Разобранный ИБП. Я вижу клеммы, ведущие к батарее...'..st;
end,
act = function(s)
if not have('ibp') then
if not have('fire') and not kover._fire then
take('ibp');
return 'Я снова беру ИБП в руки.';
end
return 'Мне он больше не нужен.';
end
return s:inv();
end,
used = function(s, w)
if not have('ibp') then
return 'Не сработает...';
end
if w == 'knife' then
s._knife = true;
return 'Я раскручиваю винты и разбираю ИБП. Теперь я вижу клеммы, ведущие к батарее...';
end
if w == 'provodki' and s._knife then
if not provodki._knife then
return 'Проводки не оголены.';
end
if not s._trut then
return 'Я подсоединяю проводки к клеммам и замыкаю усики проводов -- от замыкания проскакивает искра. Нужен трут...';
end
drop('ibp');
ibp._trut = false;
inv():add('fire');
return 'Я подсоединяю проводки к клеммам и замыкаю усики проводов. Проскакивает искра и перекидывается на трут. Трут вспыхивает!!! Огонь!!!';
end
if w == 'provod' then
return 'Я вставил, а затем снова вытащил провод из ИБП... Хммм...';
end
end,
};
provodki = obj {
nam = 'тонкие проводки',
inv = function(s)
if s._knife then
return 'Пара тонких проводков с усиками на конце.'
end
return 'Пара тонких проводков.'
end,
used = function(s, w)
if w == 'knife' and not s._knife then
s._knife = true;
return 'Я отрезаю изоляцию с концов проводка и достаю тоненькие усики.';
else
return 'Не сработает...';
end
end
};
provod = obj {
nam = 'провод от ИБП',
inv = 'Это провод от ИБП.',
used = function(s, w)
if w == 'knife' then
if not knife._oster then
return 'Лезвие ножа слишком тупое...';
end
inv():del('provod');
inv():add('provodki');
return 'Я разрезаю оплетку и достаю две жилы провода.'
end
end
};
ups = obj {
nam = 'ибп',
dsc = 'Множество {источников бесперебойного питания} стоят у каждой стойки.',
act = function(s)
if have('hand') then
return 'У меня поранена рука. Кровь так и хлещет, я не могу таскать ИБП.';
end
if not have('ibp') and not seen('ibp') then
inv():add('ibp');
inv():add('provod');
return 'Немного порывшись я отсоединяю один из источников и держу его в руках...';
end
return 'Я уже брал один UPS.';
end,
};
kover = obj {
nam = 'ковер',
dsc = function(s)
if s._fire then
return '{Ковер} на полу занимается пламенем.';
end
return 'На полу постелен красный {ковер}.';
end,
act = 'Ненужная роскошь.',
};
room5 = room {
nam = 'центр информации';
pic = 'gfx/servers.png',
dsc = [[Я в огромном помещении, занимающем всю южную часть института.]],
enter = function(s, f)
if f == 'ladder' then
set_music('mus/hybrid.xm');
lifeon('hand');
inv():add('hand');
return 'Я прыгаю и хватаюсь за раму окна. Моя правая рука в крови. Не обращая внимания на боль, я спрыгиваю на пол комнаты...';
end
end,
exit = function(s, f)
set_music("mus/under.s3m");
end,
act = function(s, w)
if w == 1 then
return 'Я не полезу назад... Там холодно и стреляют...';
end
end,
obj = { 'computers', 'ups',
vobj(1, 'окно', 'В разбитое {окно} дует холодный зимний ветер.'),
'kover',
'dout',
'portrait',
},
};
dout = obj {
nam = 'дверь',
dsc = function(s)
return 'Далеко впереди я могу видеть выходную {дверь}.'
end,
act = function(s)
if not kover._fire then
return 'Это центр обработки информации. Я должен уничтожить его, чтобы спасти мир от заразы, что хранится в недрах его накопителей...';
end
return 'Я подбегаю к двери. Дверь ведет на площадку пятого этажа и она электронная!!! Это значит, что открыть я ее могу только с помощью карточки с требуемым уровнем доступа. Я сгорю?';
end,
used = function(s, w)
if not kover._fire then
return s:act();
end
if w == 'card' then
return 'Я подношу карточку к двери. Биип -- в доступе отказано! Я сгорю здесь!!!';
end
if w == 'shotgun' then
return goto('escape2');
end
return 'Не поможет...';
end
};
handgdlg = dlg {
nam = 'охранник',
pic = 'gfx/handhoh.png',
dsc = 'Охранник -- еще молодой парень лет 30 -- смотрит на меня. Он растерян.',
obj = {
[1] = phr('Отдай мне свое оружие!', '-- Я без оружия -- качает охранник головой... Не знаю верить ему или нет, но обыскивать его мне не хочется...'),
[2] = phr('Мне нужен ключ от красной двери.', 'Охранник бледнеет. -- Ни у кого нет ключа от ЭТОЙ двери. -- произносит он. -- Что за чушь? -- Думаю я.'),
[3] = phr('Ок! Просто стой и не дергайся.', 'Охранник молча смотрит на меня',
[[pon(3);back();]]),
},
};
win5 = obj {
nam = 'окно',
dsc = function (s)
if s._broken then
return 'В разбитое {окно} завывает зимний ветер. Снежинки вихрем залетают на этаж.';
end
return 'Широкое {окно} выходит на запад.';
end,
act = function(s)
if not s._broken then
return 'Я подхожу к окну... Любопытно, я вижу, что окно выходит на довольно широкий участок крыши, который проходит через фронтальную часть здания...';
end
return 'Окно разбито... Третье за сегодня.';
end,
used = function(s, w)
if s._broken then
return s:act();
end
if w == 'shotgun' then
s._broken = true;
ways():add('krysha');
return 'Уххх.... Третье окно за сегодня... Я размахиваюсь и осколки стекла вылетают на крышу...';
end
end,
};
escape2 = room {
_timer = 0,
nam = 'площадка 5-го этажа',
pic = 'gfx/floor5e.png',
dsc = [[Потолки на пятом этаже очень высокие.]],
enter = function(s, f)
if f == 'room5' then
lifeon('escape2');
2009-08-26 08:25:53 +03:00
return 'В бессилии я бью прикладом в ненавистную дверь. И вдруг, через несколько секунд слышу, как кто-то подходит к двери с внешней стороны... Это охранник!!! Писк срабатывания считывателя -- и вот, дверь открывается. Охранник пятится -- ему в грудь упирается ствол помпового ружья. Мы выходим на площадку пятого этажа.';
2009-02-21 12:52:44 +02:00
end
if f == 'krysha' then
lifeon('escape2');
end
end,
life = function(s)
s._timer = s._timer + 1;
if s._timer == 3 then
2009-08-26 08:25:53 +03:00
return 'Внезапно, на этаже раздается звук сирены. -- Внимание!!! На пятом этаже лицо с нулевым уровнем допуска. Повторяю... -- льется голос из невидимых динамиков.';
2009-02-21 12:52:44 +02:00
end
if s._timer > 3 then
return '-- На пятом этаже лицо с нулевым уровнем доступа!!! -- от воя сирены меня начинает мутить.';
end
end,
act = function(s, w)
if w == 1 then
return 'Мои ноги утопают в красном бархате... Проклятая роскошь!';
end
if w == 2 then
return 'Нет, все-таки это хрусталь...';
end
if w == 4 then
return 'Пожар уже начался...';
end
if w == 5 then
return 'Не думаю, что мой пропуск здесь подойдет.';
end
if w == 6 then
return goto('handgdlg');
end
end,
used = function(s, w, ww)
if w == 6 then
return 'Я держу охранника на мушке.';
end
if w == 5 then
return 'Не поможет.';
end
end,
obj = {
vobj(1, 'ковер', 'Лифтовую площадку покрывает красный {ковер}.'),
vobj(2, 'люстра', 'Хрустальная {люстра} висит на высоком потолке.'),
'win5',
vobj(4, 'информация', '{Дверь} в центр обработки информации распахнута. Из нее начинает валить дым.'),
vobj(5, 'красная дверь', 'Напротив нее находится {дверь} без надписей. Это массивная дверь, обитая красной кожей.'),
vobj(6, 'охранник', 'В центре площадки подняв руки, стоит {охранник}.');
},
way = { 'lift','room5' },
exit = function(s, t)
if t == 'room5' then
return 'Там пламя!', false
end
if t == 'lift' then
2009-08-26 08:25:53 +03:00
return 'Я вижу, что лампочки вызова всех лифтов горят. Скорее всего это означает, что сюда поднимается охрана... Надо спешить!', false;
2009-02-21 12:52:44 +02:00
end
if t == 'krysha' then
lifeoff('escape2');
end
end
};
swin = obj {
nam = 'южное окно',
dsc = 'Из южного {окна} валит дым.',
act = 'Да, это одно из окон информационного центра. Я заглядываю в окно и вижу пламя.',
};
nwin = obj {
nam = 'северное окно',
dsc = function(s)
local st = '';
if s._broken then
st = ' Оно разбито.';
end
return 'Северное {окно} светит в темноту желтым светом.'..st;
end,
act = function(s)
if s._broken then
return goto('hall5');
end
return 'Гм... Я заглядываю в окно и вижу прекрасный зал.';
end,
used = function(s, w)
if w == 'shotgun' then
s._broken = true;
ways():add('hall5');
return 'Уххх... Надеюсь, это последнее??? Я размахиваюсь и разбиваю стекло прикладом помпового ружья.';
end
end,
};
hall5 = room {
nam = 'зал',
pic = 'gfx/hall5.png',
enter = function(s, f)
if f == 'krysha' then
return 'Я спрыгиваю в зал и оглядываюсь...';
end
end,
act = function(s, w)
if w == 1 then
return 'Ненужная роскошь.';
end
if w == 2 then
return 'Я провожу ладонью по скользкой поверхности одной из колонн... Мрамор!';
end
if w == 3 then
2009-08-26 08:25:53 +03:00
return 'Но уж эта-то люстра точно из горного хрусталя.';
2009-02-21 12:52:44 +02:00
end
if w == 4 then
return 'Темно... Хотя... Что это? Мне кажется, что у задней стороны института стоит поезд.';
end
if w == 5 then
return 'У разбитого окна кружатся снежинки.';
end
if w == 6 then
if s.way:srch('escape3') then
return goto('escape3');
end
return goto('gudlg');
end
if w == 7 then
return 'Эта дверь закрыта. Вряд ли ее можно открыть моим ключом.';
end
if w == 8 then
return 'Гммм... Пикассо?';
end
if w == 9 then
return 'Страшная слабость охватывает меня... Нет -- мне нельзя спать...';
end
end,
used = function(s, w, ww)
return 'Зачем?';
end,
dsc = 'Прекрасный и огромный зал занимает почти всю северную часть здания!',
obj = {
vobj(1,'ковер', 'Под ногами бархат красного {ковра}.'),
vobj(2,'колонны', 'Восемь мраморных {колонн} образуют коридор.'),
vobj(3,'люстра', 'Великолепная {люстра} свисает с потолка.'),
vobj(4,'восточные окна', 'На восток выходит четыре {окна}.'),
vobj(5,'западные окна', 'Разбитое {окно} находится слева от меня.'),
vobj(6,'небольшая дверь', 'В конце зала, в его северной части, я вижу небольшую деревянную {дверь}.'),
vobj(7,'входная дверь', 'За моей спиной входная {дверь}.'),
2009-08-26 08:25:53 +03:00
vobj(8,'картины', 'По стенам развешаны {картины} в красивых рамах.'),
2009-02-21 12:52:44 +02:00
vobj(9,'диваны', 'У стен расставлены мягкие {диваны}.'),
},
way = { 'krysha' },
};
krysha = room {
nam = 'крыша',
pic = 'gfx/krysha.png',
enter = function(s, f)
return 'Я быстро подхожу к разбитому окну и вот, я на крыше...';
end,
dsc = 'Видимо, пятый этаж был достроен позже остальных четырех. По участку крыши я могу добраться до первых окон южного и северного крыла.',
obj = {'nwin', 'swin'},
way = {'escape2'},
};
gudlg2 = dlg {
nam = 'человек с портрета',
pic = 'gfx/pmanb.png',
dsc = 'Я смотрю на его поникшее лицо. Оно по-прежнему спокойно.',
obj = {
[1] = phr('Получил, гад?',
'В ответ я слышу едва различимый стон.',
[[pon(1); back();]]),
[2] = phr('Но зачем, зачем это все?',
'Он поднял на меня свои глаза. -- Я просто делал свою работу...',
[[pon(3);poff(1);]]),
[3] = _phr('Что за ерунда?',
'-- А потом, потом стал не нужен... Ну что же -- подумал я... -- Мир заплатит за эту ошибку...',[[pon(4)]]),
[4] = _phr('Что ты несешь?',
'-- Я работал профессором... Но я был не нужен.. Я ... Я не мог это вынести...',
[[pon(5)]]),
[5] = _phr('Какой мерзавец...',
'-- Но я заставлю их... Заставлю... Я, я, я - я буду жить вечно... Сам... Один.',
[[pon(6)]]),
[6] = _phr('Мне кажется, что ты спятил...',
'Его тело дергается в углу -- это озноб.',
[[pon(1); back()]]),
}
};
gudlg = dlg {
nam = 'человек с портрета',
pic = 'gfx/pman.png',
enter = function(s)
lifeoff('mycat');
inv():del('shotgun');
2009-08-26 08:25:53 +03:00
return [[Странно... Дверь не закрыта... Я осторожно открываю дверь и вхожу в комнату.^^Внезапно я обнаруживаю, что на меня смотрит дуло револьвера. -- Браво, браво, браво -- говорит мне человек в кресле, владелец револьвера. -- Я уже заждался. Тот самый лесник? Ну что же, подождем охрану. А пока -- брось ружье на пол. Мне ничего не остается, как сделать то, что он сказал.]];
2009-02-21 12:52:44 +02:00
end,
2009-08-26 08:25:53 +03:00
dsc = [[Передо мной то самое лицо. Лицо с портретов, которыми увешаны почти все комнаты этого здания. Лицо спокойное, ничего не выражающее. Слабая улыбка на губах. Надо тянуть время... И я спрашиваю у него:]],
2009-02-21 12:52:44 +02:00
obj = {
[1] = phr('Может, поговорим?',
'Гм... Ну о чем нам говорить? О чем мне говорить с лесником?', [[pon(2)]]),
[2] = _phr('Например, правда ли то, что многомировая интерпретация Эверетта верна?',
'-- Ха ха ха ха!!! -- невыразительно смеется человек с портрета -- Конечно, это фокус... Что бы заставить этих идиотов верить в собственное бессмертие... А может...',[[pon(3)]] ),
[3] = _phr('...То-есть никакого доказательства нет?',
'Человек перестает смеяться -- ...А может -- это все-таки правда? -- загадочно произносит он -- Какой ответ истина? Как ТЫ думаешь?', [[pon(4)]]),
[4] = _phr('Я знаю, что это ложь!',
'Знаешь ли? -- пустые глаза смотрят на меня -- Да или нет? - Вдруг паника оглушает меня.'
,[[pon(5,9)]]),
[5] = _phr('Ложь!',
'А что если? Представь, что если?... Ты же хакер да? Любишь продумывать все заранее...',
[[pon(6);poff(9)]]),
2009-08-26 08:25:53 +03:00
[6] = _phr('Нет! Это не может быть правдой! Если это правда -- рано или поздно мир будет обречен! Тогда...',
2009-02-21 12:52:44 +02:00
'-- Да, ты правильно понял... Тогда есть только ТЫ!!! Послушай себя -- кто дал тебе этот ответ? Не его ли ты жаждешь? Не его ли жаждет твое Я? -- Я проваливаюсь в его бездонный взгляд.', [[pon(7)]]),
[7] = _phr('Если... Если... То зачем?',
2009-08-26 08:25:53 +03:00
'-- Правильно... Правильно -- вкрадчиво говорит мне человек с портрета... Новая волна страха оглушает меня, я падаю на колени... Сердце бешено стучит и вылетает из груди...',
2009-02-21 12:52:44 +02:00
[[pon(8)]]),
[8] = _phr('Не могу... Нет...',
'-- И если все так, то тебе нечего бояться -- мурлычет он. -- Сердце бьется еще сильнее. И наконец, моя грудь взрывается, мягкий комочек шерсти отталкивается от нее лапами и летит в лицо человеку с портрета. Раздается выстрел, резкая боль в левом плече отрезвляет меня, я вскакиваю на ноги и бросаюсь вперед...',[[return goto('escape3')]]),
[9] = _phr('Допустим, это правда.',
'-- Так... Правильно... Думай, думай...Ты же хакер, да? -- шепчет человек с портрета.',
[[pon(6);poff(5)]])
},
};
--shkf = obj {
-- nam = 'край шкафа',
-- inv = 'Я держу в руках край шкафа.',
--};
shkaf = obj {
nam = 'шкаф',
inv = 'Я держу в руках край шкафа.',
dsc = function(s)
if s._fall then
return 'Дверь завалена {шкафом}.';
end
return 'Один из книжных {шкафов} стоит возле двери.';
end,
act = function(s)
if not escape3._guards or s._fall then
return 'Какая-то философия... И еще физика.';
end
inv():add('shkaf');
return 'Я крепко схватился за край шкафа.';
end,
};
fromw5 = room {
nam = 'на подоконнике',
dsc = 'Я стою на подоконнике, ледяной ветер мешает дышать.',
pic = 'gfx/fromwin2.png',
enter = 'Ну что-же, надеюсь это в последний раз...',
act = function(s, w)
if w == 1 then
return goto('nwall');
end
end,
obj = {
vobj(1, 'труба', 'Справа от себя я едва различаю водосточную {трубу}.'),
},
way = { 'escape3' },
exit = function(s, t)
if t == 'escape3' then
return 'Надо спешить!', false;
end
end
};
winr5 = obj {
nam = 'окно',
dsc = function(s)
if s._broken then
return 'Сквозь разбитое {окно} в комнату дышит зимний ветер.';
else
return '{Окно} выходит на северную сторону.';
end
end,
act = function(s, w)
if escape3._guards then
if not shkaf._fall then
return 'Некогда любоваться видами... Надо задержать охранников.';
end
if not have('mycat') then
return 'Без Барсика? Лучше погибнуть вместе!';
end
-- if not have('revol') then
-- return 'Лучше поднять с пола пистолет, на всякий случай.';
-- end
if s._broken then
ways():add('fromw5');
return goto('fromw5');
else
return 'Окно закрыто.';
end
end
escape3._guards = true;
lifeon('escape3');
return 'За окном полная темнота. Я смотрю в темноту, когда вдруг слышу за спиной приглушенный шум шагов... Звуки идут из зала, наверное охрана добралась сюда! Нужно действовать!';
end,
used = function(s, w)
if escape3._guards and not shkaf._fall then
return 'Некогда... Скоро охрана ворвется сюда...';
end
if w == 'shotgun' then
if not s._broken then
s._broken = true;
return 'Опять? Ну что же... Я размахиваюсь и разбиваю стекло прикладом. Осколки улетает в темноту.';
end
return 'Это окно уже разбито.';
end
end,
};
revol = obj {
nam = 'револьвер',
dsc = 'На полу валяется {револьвер}.',
inv = 'Шесть зарядов.',
tak = 'Я поднимаю с пола револьвер.',
};
escape3 = room {
nam = 'в комнате',
pic = 'gfx/manroom.png',
enter = function(s, f)
if f == 'gudlg' then
inv():del('mycat');
hall5.way:add('escape3');
return 'Я слышу звук падающего пистолета... Потом я бью в чье-то лицо изо-всех сил. Снова и снова. Барсик носится вокруг и жалобно мяукает. Через несколько секунд я встаю с пола.';
end
end,
act = function(s, w)
if w == 1 then
return goto('gudlg2');
end
if w == 2 then
return 'Абстракционисты не в моем вкусе.';
end
if w == 3 then
local st = '';
if shkaf._fall then
st = ' Завалена шкафом.';
end
return 'Дверь ведущая в зал.'..st;
end
end,
used = function(s, w, ww)
if w == 1 and ww == 'shotgun' or ww == 'revol' then
return 'Да -- это зло. Но я не могу стрелять в беспомощного человека.';
end
if w == 3 and ww == 'shkaf' then
shkaf._fall = true;
inv():del('shkaf');
return 'Я толкаю шкаф и он падает, заграждая собой дверь.';
end
end,
dsc = [[Я нахожусь в небольшой, но уютной комнате. Посреди стоит стол. Рядом опрокинуто кресло. Из небольшой люстры равномерно льется свет. Два небольших книжных шкафа стоят у стен.]],
obj = {
vobj(1, 'человек', 'На полу, прислонившись к столу, сидит {человек} с портретов. Струйка крови стекает с его губ -- он стонет.'),
2009-08-26 08:25:53 +03:00
vobj(2, 'картины', 'По стенам развешаны {картины}.'),
2009-02-21 12:52:44 +02:00
vobj(3, 'дверь', 'За моей спиной {дверь}.'),
'revol',
'shkaf',
'shotgun',
'mycat',
'winr5',
},
life = function(s)
if rnd(3) == 1 then
return 'Я слышу выстрелы... Пули прошивают дверь... Надо что-то делать...';
end
end,
exit = function(s,t)
if t == 'hall5' then
if shkaf._fall then
return 'Проход завален шкафом.', false;
end
if s._guards then
return 'Меня там подстрелят...', false;
end
s._guards = true;
lifeon('escape3');
return 'Я собираюсь выйти в зал, когда вдруг на другом конце открывается дверь и в зал вбегают охранники. Я быстро захлопываю дверь.',false;
end
lifeoff('escape3');
end,
way = {
'hall5'
},
};
nwall = room {
nam = 'северная сторона',
dsc = 'Я нахожусь у северной стены здания института.',
pic = 'gfx/nside.png',
way = {'eside2','wside' },
act = function(s, w)
if w == 1 then
2009-08-26 08:25:53 +03:00
return 'Да -- водосточная труба... Довольно крепкая. Но вряд ли я смогу взобраться по ней наверх.';
2009-02-21 12:52:44 +02:00
end
end,
enter = function(s, f)
if f == 'fromw5' then
return 'Превозмогая боль в левом плече я прыгаю с подоконника на трубу... Мое сердце бешено стучит в груди, пока мы падаем с Барсиком в зимнюю темноту. Но вот, в следующее мгновение я уже соскальзываю, обдирая кожу с ладоней, по водосточной трубе...';
end
end,
obj = { vobj(1, 'труба', 'Водосточная {труба} проходит по восточному углу здания.')},
exit = function(s, t)
if t == 'wside' then
if not s._guards then
s._guards = true;
return 'Я высовываюсь из-за угла и вижу, как толпа охранников приближается ко мне из КПП. -- Вон он -- слышу я крик... Треск выстрелов отгоняет меня обратно.', false;
end
return 'Там меня ждут...', false;
end
end
};
eside2 = room {
nam = 'сзади института',
pic = 'gfx/esidee.png',
dsc = [[ Я нахожусь у задней стены здания института. Здесь проходят рельсы.]],
act = function(s,w)
if w == 1 then
return 'Пулеметы направлены на внешнюю - южную сторону периметра, надо держаться от них подальше.';
end
if w == 2 then
return 'Гм... Похоже это тот самый поезд... Разгрузка еще не началась, но ворота уже открыты.';
end
if w == 3 then
return 'Четыре вагона. Тип тепловоза - ЧМЭ3. Поезд полностью помещается на территории института.';
end
end,
obj = {
vobj(1,'пулеметные вышки', 'Въезд поезда охраняется пулеметными {вышками}..'),
vobj(3,'поезд', 'Перед институтом стоит темная громада {поезда}.'),
vobj(2,'ворота', 'Большие железные {ворота} в стене института открыты -- я вижу свет, который льется из дверного проема.'),
},
exit = function(s, t)
if t == 'sside' then
return 'На южной стороне меня смущают пулеметы. Лучше не рисковать.', false
end
if t == 'nwall' and nwall._guards then
return 'Назад пути нет...', false;
end
end,
way = {'nwall','train','sside'},
};
function checkloc()
if p1._off or p2._off then -- battary or switch off off
p3._off = true;
p4._off = true;
p5._off = true;
-- p51._off = true;
-- p6._off = true;
end
if p3._off or p4._off then
-- p7._off = true;
-- p71._off = true;
end
if p5._off then
p7._off = true;
end
if p51._off then
p71._off = true;
end
if p6._off then
-- p7._off = true;
-- p71._off = true;
end
if p7._off then
-- p71._off = true;
end
end
p1 = obj {
_off = false,
nam = 'разъеденитель',
dsc = function(s)
local st = 'включено.';
if s._off then
st = 'выключено.';
end
return '{Разъеденитель} батареи ВБ: '..st;
end,
act = function(s)
if s._off then
s._off = false;
else
s._off = true;
end
checkloc();
return 'Переключаю...';
end
};
p2 = obj {
_off = true;
nam = 'ключ',
dsc = function(s)
local st = 'повернут вниз.';
if s._off then
st = 'повернут вверх.';
end
return '{Ключ} кнопочных выключателей: '..st;
end,
act = function(s)
if s._off then
s._off = false;
else
s._off = true;
end
checkloc();
return 'Я поворачиваю ключ.';
end
};
p3 = obj {
_off = true,
nam = 'электроманометр',
dsc = function(s)
local st = 'включено.';
if s._off then
st = 'выключено.';
end
return '{Электроманометр}: '..st;
end,
act = function(s)
if p1._off or p2._off then
return 'Странно... Не получается.'
end
if s._off then
s._off = false;
else
s._off = true;
end
checkloc();
return 'Переключаю...'
end
};
p4 = obj {
_off = false,
nam = 'электротермометр',
dsc = function(s)
local st = 'включено.';
if s._off then
st = 'выключено.';
end
return '{Электротермометр}: '..st;
end,
act = function(s)
if p1._off or p2._off then
return 'Странно... Не получается.'
end
if s._off then
s._off = false;
else
s._off = true;
end
checkloc();
return 'Переключаю...'
end
};
p5 = obj {
_off = true,
nam = 'насос 2-й секции',
dsc = function(s)
local st = 'включено.';
if s._off then
st = 'выключено.';
end
return 'Топливный {насос} 2-й секции: '..st;
end,
act = function(s)
if p1._off or p2._off then
return 'Странно... Не получается.'
end
if s._off then
s._off = false;
else
s._off = true;
end
checkloc();
return 'Переключаю...'
end
};
p6 = obj {
_off = true,
nam = 'управление',
dsc = function(s)
local st = 'включено.';
if s._off then
st = 'выключено.';
end
return '{Управление}: '..st;
end,
act = function(s)
if p1._off or p2._off then
return 'Странно... Не получается.'
end
if s._off then
s._off = false;
else
s._off = true;
end
checkloc();
return 'Переключаю...'
end
};
p7 = obj {
_off = true,
nam = 'пуск дизеля 2-й секции',
dsc = function(s)
local st = 'включено.';
if s._off then
st = 'выключено.';
end
return '{Пуск} дизеля 2-й секции: '..st;
end,
act = function(s)
if p3._off or p4._off or p5._off or p6._off then
return 'Странно... Не получается.'
end
if s._off then
s._off = false;
else
s._off = true;
end
checkloc();
return 'Переключаю...'
end
};
p51 = obj {
_off = true,
nam = 'насос 1-й секции',
dsc = function(s)
local st = 'включено.';
if s._off then
st = 'выключено.';
end
return 'Топливный {насос} 1-й секции: '..st;
end,
act = function(s)
if p1._off or p2._off then
return 'Странно... Не получается.'
end
if s._off then
s._off = false;
else
s._off = true;
end
checkloc();
return 'Переключаю.';
end
};
p71 = obj {
_off = true,
nam = 'пуск дизеля 1-й секции',
dsc = function(s)
local st = 'включено.';
if s._off then
st = 'выключено.';
end
return '{Пуск} дизеля 1-й секции: '..st;
end,
act = function(s)
if p3._off or p4._off or p5._off or p6._off or p7._off then
return 'Странно... Не получается.'
end
if s._off then
s._off = false;
else
s._off = true;
end
checkloc();
return 'Переключаю...';
end
};
p8 = obj {
_num = 1,
nam = 'реверсор',
dsc = function(s)
local st;
if s._num == 1 then
st = 'нейтрально.';
elseif s._num == 2 then
st = 'назад.';
elseif s._num == 3 then
st = 'вперед.';
end
return 'Рукоятка {реверсора}: '..st;
end,
act = function(s)
s._num = s._num + 1;
if s._num == 4 then
s._num = 1;
end
return 'Переключаю...';
end
};
p9 = obj {
_num = 1,
nam = 'контроллер',
dsc = function(s)
local st;
if s._num == 1 then
st = '0.';
elseif s._num == 2 then
st = '1.';
elseif s._num == 3 then
st = '2.';
end
return 'Рукоятка {контроллера}: '..st;
end,
act = function(s)
s._num = s._num + 1;
if s._num == 4 then
s._num = 1;
end
if s._num == 1 then
return 'Переключаю.';
end
if not p71._off and not p7._off then
if p8._num == 2 then
s._num = 1;
return 'Локомотив вздрагивает и начинает ехать назад. Я перевожу контроллер на 0.';
elseif p8._num == 3 then
lifeoff('mycat');
set_music('mus/liberty.s3m');
return goto('theend');
end
end
s._num = 1;
return 'Ничего не происходит... Я перевожу контроллер в положение 0.';
end
};
train = room {
nam = function(s)
if here() == train then
return 'в локомотиве';
end
return 'к поезду';
end,
pic = 'gfx/cab.png',
dsc = 'Итак, я в локомотиве. Толстая сталь надежно укрывает меня от пуль. Кабина машиниста оказалась пуста. Я вижу перед собой множество приборов.',
act = function(s, w)
if w == 2 then
if p1._off or p2._off then
return 'Я нажал кнопку гудка, но ничего не услышал.';
end
return 'Раздается унылый звук сигнала. -- Я машинист!';
end
if w == 1 then
return 'Только бы успеть завести эту штуку... И никакие ворота меня не остановят.';
end
end,
life = function(s)
local st = '';
if not p7._off or not p71._off then
st = 'Я чувствую как дрожит локомотив. Работает дизель. ';
end
if rnd(10) < 5 then
st = st..'В кабине раздаются звуки ударов пуль о металл.';
end
return st;
end,
exit = function(s,t)
if t == 'eside2' then
return 'Нет... Лучше остаться здесь, мы будем сопротивляться до последнего.', false;
end
lifeoff('train');
end,
enter = function(s, f)
if f == 'eside2' and not guards1._broken then
return cat('Пригнувшись, я бегу к поезду.^^', goto('vorota')), false;
end
lifeon('train');
set_music('mus/hispeed.s3m');
return 'Пригнувшись, я бегу к поезду... Пробегая мимо вагонов я успеваю заметить знаки <<осторожно -- радиация!!>>. Еще немного и я добираюсь до локомотива. Сзади я слышу звуки выстрелов. Впереди охрана разворачивает пулеметы. Я открываю тяжелую дверь и вот я -- внутри.'
end,
obj = {
'p2', 'p1', 'p4', 'p3', 'p71','p51', 'p7', 'p5', 'p9', 'p8', 'p6',
vobj(2, 'гудок', '{Гудок}.');
vobj(1, 'окно', 'В {окнах} я вижу закрытые ворота.'),
},
way = { 'eside2' },
};
guards1 = obj {
nam = 'охрана',
dsc = function(s, w)
if s._broken then
return '{Охранники} за турникетами завалены обломками люстры.';
end
if s._shoot then
return 'Я вижу {охранников}, которые укрываются от моего огня за турникетами.';
end
return 'Я вижу {охранников} с автоматами, которые пробираются ко мне через зал первого этажа.';
end,
act = function(s, w)
if s._broken then
return 'Похоже, они в замешательстве...';
end
if s._shoot then
return 'Вот негодяи!';
end
return 'Удивительно, что я еще жив...';
end,
used = function(s, w)
if w == 'shotgun' or w == 'revol' then
if s._shoot then
return 'Бесполезно, охранники защищены металлом турникетов.';
end
s._shoot = true;
return 'Я высовываюсь из-за стены и стреляю несколько раз наугад.';
end
end,
};
lustra1 = obj {
nam = 'люстры',
dsc = function(s, w)
if s._broken then
return 'На потолке висит одна {люстра}.';
end
return 'Две ослепительные {люстры} свисают с потолка.';
end,
act = function(s, w)
if guards1._shoot then
return 'Одна из люстр находится прямо над турникетами.';
end
return 'Не могу на них наглядеться... Наверное, это хрусталь?';
end,
used = function(s, w)
if w == 'revol' then
return 'Вряд ли этот пистолет принесет сильный ущерб люстрам.';
end
if w == 'shotgun' then
shotgun._unloaded = true;
s._broken = true;
guards1._broken = true;
lifeoff('vorota');
drop('shotgun');
return 'Я высовываюсь из-за стены и разряжаю помповое ружье. Сильный грохот и звуки щелкающего затвора оглушают меня. Я вижу как одна из люстр, сопровождаемая криками охранников, медленно оторвавшись летит вниз. Я выбрасываю бесполезное ружье на пол.';
end
end,
};
vorota = room {
nam = 'у ворот',
pic = 'gfx/shooting.png',
enter = function(s, f)
if f == 'eside2' and not guards1._broken then
lifeon('vorota');
return 'Поравнявшись с открытыми воротами я слышу треск выстрелов и прижимаюсь к стене.';
end
end,
life = function(s)
if rnd(6) < 4 then
return 'Раздается треск выстрелов. Я вжимаюсь в стену.';
end
end,
act = function(s, w)
if w == 1 then
return 'Те самые турникеты, через которые я попал внутрь. Теперь я нахожусь с другой стороны.';
end
end,
dsc = 'Я нахожусь у открытых ворот. Ворота ведут на первый этаж института.',
obj = {
vobj(1, 'турникеты', 'Я вижу ряд {турникетов}.'),
'lustra1',
'guards1',
},
exit = function(s, t)
if not guards1._broken and t == 'train' then
return 'Я бросаюсь вперед, но автоматные очереди заставляют меня вернуться.', false;
end
end,
way = { 'train', 'eside2' },
};
theend = room {
nam = 'эпилог',
pic = 'gfx/chme3.png',
dsc = [[Я передвинул ручку контроллера в самое переднее положение и локомотив,
вздрогнув, двинулся вперед. Я услышал крики, и пулеметные очереди с новой силой застучали
по стенкам кабины... Но локомотив набирал ход, и скоро послышался сильный лязг -- это ворота,
не выдержав натиска 1350 лошадиных сил, вылетели из своих петель и протащились несколько
десятков метров вдоль путей...^^
Барсик высунул морду из-за пазухи и осмотрелся вокруг. Я привычно погладил его за ушами.
Когда лязг раздавленных ворот и стук пуль утихли, я выглянул из окна и последний раз посмотрел в сторону института. Он полыхал словно факел -- пожар уже захватил весь пятый этаж.
Я посмотрел на небо и теперь, уже в полной темноте, смог разглядеть россыпи звезд. ^^
Совсем скоро поле уступило место тайге, и привычные очертания сосен и елей замелькали под
ровный стук колес. Рана в плече ныла, и я почувствовал сильную усталость... Присев на пол
и прислонившись к холодному железу кабины, я слушал гудение локомотива и гладил Барсика за
ушами...^^
Барсик посмотрел на меня своими умными глазами и вопросительно замурлыкал -- Домой,
ответил я ему -- Мы едем домой...^^
КОНЕЦ^^
---^^
История и движок: ^
Косых Петр a.k.a. gl00my // 2009^^
Графика: ^
Косых Петр, несколько фотографий из открытых источников.^^
Музыка: ^
One fine day // Elwood^
Revelation // necros^
New beginning // Purple Motion^
Ice frontier // Skaven^
Planete football // Frank Amoros^
Underwater world II // Slightly Magic^
Hybrid song // Quazar^
Hispeed - track whatever // Purple Motion^
Liberty // Zapper^^
Шрифт темы по-умолчанию:^
Arial от Microsoft.^^
Тестеры:^
Каличев Сергей a.k.a. Pkun^
Подобаев Владимир a.k.a. zloyvov^^
Если вам понравилась игра, самое лучшее, что вы можете сделать, это написать свою историю на движке instead. :)^^
Благодарности:^
Всем тем, кто не мешал. :)^^
]],
};