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
2009-08-26 05:25:53 +00:00

1643 lines
68 KiB
Lua
Raw 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.

lection = room {
nam = 'Лекция Белина',
pic = 'gfx/lection.png',
dsc = [[Я пробираюсь к месту и сажусь... Отсюда хорошо слышно -- послушаем именитого физика... -- Думаю я... ^^Итак, в ноябре 1935г. Шредингер опубликовал статью,
в которой проводился следующий мысленный эксперимент -- продолжал Белин --
в чем суть эксперимента? -- С этими словами Белин вытащил и поставил на стол
ящик странного вида -- Люблю опыты -- белоснежная улыбка тускло блеснула в свете ламп --
Как вы можете видеть это ящик -- Белин похлопал ладонью
по гладкой поверхности. -- В ящик встроена капсула с ядовитым газом
Кроме того, в статико-динамическом поле ящика находятся счетчик радиации,
изотопный элемент и таймер. Параметры эксперимента подобраны так, что вероятность того, что ядро распадётся за 1 час, составляет 50%.^^
Если ядро распадается, оно приводит механизм в действие, он открывает ёмкость с газом. --
Пока все просто -- не так ли, господа? -- Улыбается Белин -- но дело в том,
что Шредингер в своем эксперименте помещает в ящик кота -- живое существо. ^^
Согласно квантовой механике, если над ядром не производится наблюдения, то его состояние описывается суперпозицией (смешением) двух состояний — распавшегося ядра и нераспавшегося ядра, следовательно, кот, сидящий в ящике, и жив, и мёртв одновременно. -- Белин повышает голос. -- можно сказать, что это просто игры разума, отвлеченная лирика, но я покажу и докажу, что это не совсем так... ^^
-- Итак, если ящик открыть, то экспериментатор обязан увидеть только какое-нибудь одно конкретное состояние — <<ядро распалось, кот мёртв>> или <<ядро не распалось, кот жив>>. Сам Шредингер думал, что его парадокс доказывает несостоятельность квантовой механики, но мы то с вами знаем, что квантовая механика и есть истинное представление о нашем мире -- снова повышает тон голоса Белин -- и вот, независимо друг от друга, что доказывает отчасти истинность предположения -- Ганс Моравек в 1987 и Бруно Маршал в 1988 рассмотрели ситуацию с точки зрения самого кота!^^
-- Если верна многомировая интерпретация Эверетта, то в результате каждого проведенного эксперимента с котом вселенная расщепляется на две вселенных, в одной из которых кот остается жив, а в другой погибает. В мирах, где кот умирает, он перестает существовать. Напротив, с точки зрения неумершего кота, эксперимент будет продолжаться, не приводя к исчезновению кота. Это происходит потому, что в любом ответвлении кот способен наблюдать результат эксперимента лишь в том мире, в котором он выживает. И если многомировая интерпретация верна, то кот может заметить, что он никогда не погибнет в ходе эксперимента... -- Белин замолкает и осматривает зал... ^^
-- Но что вытекает из этого, господа? Я спрашиваю, что из этого вытекает? -- Представим, что участник эксперимента взрывает ядерную бомбу вблизи себя. С точки зрения многомировой интерпретации, практически во всех параллельных вселенных ядерный взрыв уничтожит участника. Но несмотря на это, должно существовать небольшое множество альтернативных вселенных, в которых участник каким-либо образом выживает. И мы переходим к идее -- Белин снова поднял голос -- идее квантового бессмертия!!! ^^
-- Идея квантового бессмертия состоит в том, что участник остаётся в живых, и тем самым способен воспринимать окружающую реальность, по меньшей мере в одной из вселенных в множестве, пусть даже количество таких вселенных пренебрежимо мало в сравнении с количеством всех возможных вселенных. Таким образом, со временем участник обнаружит, что он может жить вечно!!! ^^
Мы все с вами тяжело работали этот год, под четким руководством... -- тут Белин бросил взгляд в сторону портретов -- и должен вам сказать, что информации в нашем информационном центре -- Белин посмотрел в потолок -- достаточно, чтобы доказать, я повторяю, научно доказать теоретически и экспериментально истинность многомировой интерпретации... -- Но что это значит для нас? -- Вы не можете этого видеть, но -- Белин смотрит на часы -- уже через несколько минут состав с ураном прибывает к задним воротам института... Урана хватит для того, чтобы обеспечить каждого из вас ядерной бомбой. Так как вы скоро убедитесь в том, что квантовое бессмертие это реальность, то каждый из нас сможет стать непобедимым террористом!!! Вселенная расщепится на множество миров, в каждом из который Вы -- палец Белина указывает в зал -- будете его диктатором и господином!!! -- Белин почти кричал...^^
Зал не выдержал и взревел. Люди вставали и хлопали... Их глаза горели каким-то бешеным огнем... О Боже, -- подумал я -- это какое-то наваждение... Мои ноги не слушались меня -- я сидел на своем месте и не мог пошевелиться...^^
Но я отвлекся -- говорит Белин -- продолжим наш опыт. С этими словами он достал из под стола живой комочек... Это был мой Барсик... -- Сейчас я помещу эту кошку в ящик и мы с вами... -- красная пелена застилает мои глаза...
]],
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 = {
vobj(1, 'дальше', '{Дальше}.'),
};
};
profdlg = dlg {
nam = '!!!',
pic = 'gfx/me.png',
dsc = 'Я собираюсь с силами, встаю и во всю глотку кричу...',
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)]]),
[2] = _phr('Я сказал на стол ружье!!! -- я посильнее надавливаю стволами на Белина -- он близок к обмороку.', 'Охранник осторожно кладет помповое ружье на стол и толкает его ко мне... -- я быстро забираю ружье. Теперь в левой руке у меня обрез, в правом -- помповое ружье.',
[[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;
return 'Я достаю обрез из-под одежды и, перепрыгивая через стол, бросаюсь к Белину.';
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
return 'Прыгать или нет? Вот в чем вопрос...';
end,
};
window = room {
nam = function(s)
if here() == window then
return 'на подоконнике';
end
return 'в окно';
end,
pic = 'gfx/fromwin1.png',
enter = "Это безумие, но все же я бросаюсь к окну... За спиной я слышу рев толпы...";
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');
return 'Внезапно, ночную тьму разрезает луч прожектора и тишину нарушает вой сирены... Похоже, внизу меня заметили...', false;
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;
return 'Я кладу бумагу на ковер... Волоски ковра вспыхивают... Похоже, начинается пожар..';
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');
return 'В бессилии я бью прикладом в ненавистную дверь. И вдруг, через несколько секунд слышу, как кто-то подходит к двери с внешней стороны... Это охранник!!! Писк срабатывания считывателя -- и вот, дверь открывается. Охранник пятится -- ему в грудь упирается ствол помпового ружья. Мы выходим на площадку пятого этажа.';
end
if f == 'krysha' then
lifeon('escape2');
end
end,
life = function(s)
s._timer = s._timer + 1;
if s._timer == 3 then
return 'Внезапно, на этаже раздается звук сирены. -- Внимание!!! На пятом этаже лицо с нулевым уровнем допуска. Повторяю... -- льется голос из невидимых динамиков.';
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
return 'Я вижу, что лампочки вызова всех лифтов горят. Скорее всего это означает, что сюда поднимается охрана... Надо спешить!', false;
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
return 'Но уж эта-то люстра точно из горного хрусталя.';
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,'входная дверь', 'За моей спиной входная {дверь}.'),
vobj(8,'картины', 'По стенам развешаны {картины} в красивых рамах.'),
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');
return [[Странно... Дверь не закрыта... Я осторожно открываю дверь и вхожу в комнату.^^Внезапно я обнаруживаю, что на меня смотрит дуло револьвера. -- Браво, браво, браво -- говорит мне человек в кресле, владелец револьвера. -- Я уже заждался. Тот самый лесник? Ну что же, подождем охрану. А пока -- брось ружье на пол. Мне ничего не остается, как сделать то, что он сказал.]];
end,
dsc = [[Передо мной то самое лицо. Лицо с портретов, которыми увешаны почти все комнаты этого здания. Лицо спокойное, ничего не выражающее. Слабая улыбка на губах. Надо тянуть время... И я спрашиваю у него:]],
obj = {
[1] = phr('Может, поговорим?',
'Гм... Ну о чем нам говорить? О чем мне говорить с лесником?', [[pon(2)]]),
[2] = _phr('Например, правда ли то, что многомировая интерпретация Эверетта верна?',
'-- Ха ха ха ха!!! -- невыразительно смеется человек с портрета -- Конечно, это фокус... Что бы заставить этих идиотов верить в собственное бессмертие... А может...',[[pon(3)]] ),
[3] = _phr('...То-есть никакого доказательства нет?',
'Человек перестает смеяться -- ...А может -- это все-таки правда? -- загадочно произносит он -- Какой ответ истина? Как ТЫ думаешь?', [[pon(4)]]),
[4] = _phr('Я знаю, что это ложь!',
'Знаешь ли? -- пустые глаза смотрят на меня -- Да или нет? - Вдруг паника оглушает меня.'
,[[pon(5,9)]]),
[5] = _phr('Ложь!',
'А что если? Представь, что если?... Ты же хакер да? Любишь продумывать все заранее...',
[[pon(6);poff(9)]]),
[6] = _phr('Нет! Это не может быть правдой! Если это правда -- рано или поздно мир будет обречен! Тогда...',
'-- Да, ты правильно понял... Тогда есть только ТЫ!!! Послушай себя -- кто дал тебе этот ответ? Не его ли ты жаждешь? Не его ли жаждет твое Я? -- Я проваливаюсь в его бездонный взгляд.', [[pon(7)]]),
[7] = _phr('Если... Если... То зачем?',
'-- Правильно... Правильно -- вкрадчиво говорит мне человек с портрета... Новая волна страха оглушает меня, я падаю на колени... Сердце бешено стучит и вылетает из груди...',
[[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, 'человек', 'На полу, прислонившись к столу, сидит {человек} с портретов. Струйка крови стекает с его губ -- он стонет.'),
vobj(2, 'картины', 'По стенам развешаны {картины}.'),
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
return 'Да -- водосточная труба... Довольно крепкая. Но вряд ли я смогу взобраться по ней наверх.';
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. :)^^
Благодарности:^
Всем тем, кто не мешал. :)^^
]],
};