1525 lines
68 KiB
Lua
1525 lines
68 KiB
Lua
------------- now got inside!!! -----------------------
|
||
napil = obj {
|
||
nam = 'напильник',
|
||
dsc = 'Под воротами валяется {напильник}.',
|
||
inv = 'Уже начал ржаветь...',
|
||
tak = 'Я взял напильник.',
|
||
use = function(s, w)
|
||
if w == 'knife' and not knife._oster then
|
||
knife._oster = true;
|
||
return 'Я затачиваю напильником нож... Теперь он острый!';
|
||
elseif w == 'gun' and not gun._obrez then
|
||
if here() == wside or here() == sside then
|
||
return 'Тут много людей вокруг!';
|
||
end
|
||
gun._obrez = true;
|
||
return 'Я присел, взял покрепче дробовик и укоротил напильником оба ствола.';
|
||
else
|
||
return 'Нет, это бесполезно пилить...';
|
||
end
|
||
end
|
||
};
|
||
eside = room {
|
||
pic = 'gfx/eside.png',
|
||
nam = 'сзади института',
|
||
dsc = [[ Я нахожусь у задней стены здания института. Здесь проходят рельсы.]],
|
||
act = function(s,w)
|
||
if w == 1 then
|
||
return 'Пулеметы направлены на внешнюю - южную сторону периметра, надо держаться от них подальше.';
|
||
end
|
||
if w == 2 then
|
||
return 'Ворота железные. И заперты изнутри.';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1,'пулеметные вышки', 'Въезд поезда охраняется пулеметными {вышками}..'),
|
||
vobj(2,'ворота', 'Железнодорожные пути проходят мимо больших железных {ворот} -- видимо через них обеспечивается снабжение.'),
|
||
'napil',
|
||
},
|
||
exit = function(s, t)
|
||
if t == 'sside' then
|
||
return 'На южной стороне меня смущают пулеметы. Лучше не рисковать.', false
|
||
end
|
||
end,
|
||
enter = function(s, f)
|
||
if f == 'onwall' then
|
||
-- end of episode 1
|
||
inmycar = nil;
|
||
deepforest = nil;
|
||
road = nil;
|
||
forest = nil;
|
||
home = nil;
|
||
shop = nil;
|
||
village = nil;
|
||
kpp = nil;
|
||
inst = nil;
|
||
onwall = nil;
|
||
backwall = nil;
|
||
guydlg = nil;
|
||
shop2 = nil;
|
||
shopdlg = nil;
|
||
guarddlg = nil;
|
||
set_music("mus/ice.s3m");
|
||
end
|
||
end,
|
||
way = {'nside','sside'},
|
||
};
|
||
|
||
card = obj {
|
||
nam = 'пропуск',
|
||
inv = [[Это пропуск.
|
||
Электронная смарткарта с фотографией какого-то металлюги. Написано: Алексей Подковин -- 3-й уровень, категория: материя. Гммм...]],
|
||
};
|
||
alienwear = obj {
|
||
xnam = {'джинсовка', 'красная куртка', 'пальто','куртка', 'белая куртка', 'пиджак', 'косуха', 'спортивная куртка',},
|
||
xinv = {
|
||
'Холодновато, но стильно!',
|
||
'Очень красиво смотрится на фоне снега!',
|
||
'Длиннополое пальто -- это ретро!',
|
||
'Я -- терминатор!',
|
||
'Я -- пацифист!',
|
||
'Пиджачок сидит на мне как влитой!',
|
||
'Рокн рол мертв, а я еше нет!',
|
||
'Когда-то я занимался альпинизмом!',
|
||
},
|
||
nam = function(s)
|
||
return s.xnam[s._num];
|
||
end,
|
||
inv = function(s)
|
||
if s._num == 7 and not have('card') then
|
||
inv():add('card');
|
||
return 'Немного покопавшись в карманах косухи, я нашел карточку.';
|
||
end
|
||
return s.xinv[s._num];
|
||
end,
|
||
};
|
||
|
||
garderob = obj {
|
||
nam = 'гардероб',
|
||
dsc = 'На правой стороне коридора висят {вешалки} с одеждой.',
|
||
act = function(s, w)
|
||
if have('mywear') or have('alienwear') then
|
||
return 'Здесь много людей, я не думаю, что я смогу сделать это незаметно.';
|
||
elseif tonumber(w) and tonumber(w) > 0 and tonumber(w) <= 8 then
|
||
if not me()._walked then
|
||
return 'Это будет слишком заметно...';
|
||
end
|
||
alienwear._num = w;
|
||
inv():add('alienwear');
|
||
ref(s.obj[w]):disable();
|
||
me()._walked = false;
|
||
inv():add('gun');
|
||
return 'Я спокойно беру чужую одежду и также спокойно одеваю ее... Дробовик я снимаю из под своего ватника.';
|
||
else
|
||
return 'Надо определиться...';
|
||
end
|
||
end,
|
||
used = function(s, w)
|
||
if w == 'mywear' then
|
||
garderob.obj:add('mywear');
|
||
inv():del('mywear');
|
||
inv():del('gun');
|
||
return 'Я вешаю ватник на вешалку. Дробовик придется спрятать под ватником.';
|
||
end
|
||
if w == 'alienwear' then
|
||
local v = alienwear._num;
|
||
ref(s.obj[v]):enable();
|
||
inv():del('alienwear');
|
||
inv():del('gun');
|
||
return 'Я вешаю чужую одежду на вешалку. Дробовик я вешаю под свой ватник на вешалке.';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1,'джинсовка','{Джинсовка}.'),
|
||
vobj(2,'красная куртка','{Куртка} ало-красного цвета.'),
|
||
vobj(3,'пальто','{Пальто}.'),
|
||
vobj(4,'куртка терминатора', "{Куртка} с надписью I\'ll back."),
|
||
vobj(5,'куртка с ромашками', "Белая {куртка} с изображением ромашек."),
|
||
vobj(6,'пиджак', "Шерстяной {пиджак}."),
|
||
vobj(7,'косуха','Клевая {косуха}.'),
|
||
vobj(8,'спортивная куртка', "Оранжевая альпинистская {куртка}."),
|
||
}
|
||
};
|
||
portrait = obj {
|
||
nam = 'портреты',
|
||
dsc = 'По стенам развешены большие {портреты} в деревянных рамах.',
|
||
act = 'Гм... На портретах одно и тоже лицо! Улыбающееся холодной улыбкой лицо человека, лет сорока, с пустым, ничего не выражающим взглядом.',
|
||
};
|
||
|
||
salo = obj {
|
||
nam = 'сало',
|
||
inv = 'Это кусочек сала. Я не могу его доесть, он очень жесткий...',
|
||
use = function(s, w)
|
||
if w == 'trap' and not trap._salo then
|
||
inv():del('salo');
|
||
trap._salo = true;
|
||
return 'Гм... По-моему у меня получилась мышеловка!';
|
||
end
|
||
end
|
||
};
|
||
|
||
food = obj {
|
||
nam = 'еда',
|
||
inv = function (s)
|
||
inv():del('food');
|
||
return 'Я не выдерживаю и съедаю все это великолепие стоя, держа поднос в левой руке. Ухх... Затем я отношу поднос в мойку.';
|
||
end
|
||
};
|
||
|
||
knife = obj {
|
||
nam = 'нож',
|
||
dsc = 'На подносе лежит {нож}.',
|
||
inv = function(s)
|
||
if s._oster then
|
||
return 'Железный и очень острый ножик.';
|
||
end
|
||
return 'Железный и тупой ножик.';
|
||
end,
|
||
use = function(s, w)
|
||
if w == 'shells' then
|
||
if not s._oster then
|
||
return 'Нож тупой.';
|
||
end
|
||
if have('poroh') then
|
||
return 'У меня уже есть порох.';
|
||
end
|
||
inv():add('poroh');
|
||
return 'Я расковыриваю один из патронов и высыпаю на ладонь порох.';
|
||
end
|
||
end,
|
||
tak = function(s)
|
||
if have('knife') then
|
||
return 'У меня уже есть один...', false
|
||
end
|
||
return 'Возьму его пока с собой.';
|
||
end
|
||
};
|
||
|
||
ostatki = obj {
|
||
nam = 'остатки еды',
|
||
dsc = '{Объедки} равномерно распределены по тарелкам.',
|
||
tak = function(s)
|
||
if food._num ~= 2 or have('salo') then
|
||
return 'Ничего полезного...', false;
|
||
else
|
||
take('salo');
|
||
return 'Кусочек сала!', false;
|
||
end
|
||
end
|
||
};
|
||
|
||
podnos = obj {
|
||
nam = 'поднос',
|
||
dsc = 'На столе стоит {поднос}.',
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Вилка как вилка... Не очень чистая.';
|
||
end
|
||
if w == 2 then
|
||
return 'Ложка не отличается оригинальностью своей конструкции.';
|
||
end
|
||
return 'Синий пластик. Немного жирный на ощупь.';
|
||
end,
|
||
obj = { 'ostatki',
|
||
vobj(1, 'вилка', 'Рядом лежат {вилка} и'),
|
||
vobj(2, 'ложка', '{ложка}.')
|
||
},
|
||
};
|
||
|
||
moika = room {
|
||
nam = 'мойка',
|
||
enter = function()
|
||
return cat('Я отношу грязную посуду в мойку.^^', goto('kitchen')), false;
|
||
end
|
||
};
|
||
|
||
eating = room {
|
||
pic = 'gfx/podnos.png',
|
||
enter = function(s, f)
|
||
podnos.obj:add('knife');
|
||
inv():del('food');
|
||
if not me()._kitchendlg then
|
||
me()._kitchendlg = true;
|
||
return goto('kitchendlg'), false;
|
||
end
|
||
if f ~= 'kitchendlg' then
|
||
return 'Я сажусь за пустой столик и слегка перекусываю.';
|
||
end
|
||
end,
|
||
nam = 'за столом',
|
||
dsc = 'Под моими руками гладкая поверхность стола.',
|
||
obj = { 'podnos' },
|
||
way = { 'moika' },
|
||
exit = function(s)
|
||
end
|
||
};
|
||
|
||
gotfood = function(w)
|
||
inv():add('food');
|
||
food._num = w;
|
||
return back();
|
||
end
|
||
|
||
invite = obj {
|
||
nam = 'приглашение',
|
||
inv = 'Приглашение на лекцию Белина: 4-й уровень, зал 2... Гммм.... Мне нужно туда попасть... У него мой Барсик.',
|
||
}
|
||
|
||
povardlg = dlg {
|
||
nam = 'на кухне',
|
||
pic = 'gfx/povar.png',
|
||
dsc = 'Передо мной полное лицо женщины - повара в белом колпаке и усталым взглядом...',
|
||
obj = {
|
||
[1] = phr('Мне вот-этих зелененьких... Ага -- и бобов!', 'На здоровье!', [[pon(1); return gotfood(1);]]),
|
||
[2] = phr('Картошку с салом, пожалуйста!', 'Приятного аппетита!', [[pon(2); return gotfood(2);]]),
|
||
[3] = phr('Две порции чесночного супа!!!', 'Прекрасный выбор!', [[pon(3);return gotfood(3);]]),
|
||
[4] = phr('Мне что-нибудь легонькое, у меня язва...', 'Овсянка!', [[pon(4); return gotfood(4);]]),
|
||
},
|
||
};
|
||
kitchendlg = dlg {
|
||
nam = 'разговор с сотрудником института',
|
||
pic = 'gfx/ilya.png',
|
||
dsc = 'Я взял свой поднос и присел за свободный столик. Через минуту со словами "Не занято?" ко мне подсел молодой парень.',
|
||
obj = {
|
||
[1] = phr('Нет, не занято...', '-- Спасибо. Как дела? Ты из какого отдела?', [[pon(3,4,5); poff(2);]]),
|
||
[2] = phr('Занято...', '-- Ха ха ха! Хорошая шутка! Ты из какого отдела?', [[pon(3,4,5); poff(1);]]),
|
||
[3] = _phr('Хм... Из отдела искривления пространства...', '-- Старье!', [[pon(6);poff(4,5)]]),
|
||
[4] = _phr('Ааа... Отдел квантовых скачков..', '-- Хм? Не слышал о таком.', [[pon(6);poff(3,5)]]),
|
||
|
||
[5] = _phr('Эээ... Отдел изучения квазипространства!', '-- Ого! Прикольно!', [[pon(6);poff(3,4)]]),
|
||
[6] = _phr('Хм... ', '-- А у тебя какой уровень секретности?', [[pon(7,8)]]),
|
||
[7] = _phr('Супер секретно!', '-- Ух ты! ... ', [[poff(8); pon(9)]]),
|
||
[8] = _phr('Анонимный.', '-- Да? Не слышал о таком, наверное это более секретный уровень, чем мой...',
|
||
[[poff(7); pon(9)]]),
|
||
[9] = _phr('Мэээ...', '-- Меня зовут Илья... Просто Илья -- тянет худую руку парень -- а тебя как?', [[pon(10, 11, 12)]]),
|
||
[10] = _phr('Пп.. Пк... Пупкин... Василий Пупкин.', '-- Редкая фамилия!', [[poff(11,12); pon(13)]]),
|
||
[11] = _phr('Сережка.', '-- Дай пятерню, братан!', [[poff(10,12); pon(13)]]),
|
||
[12] = _phr('Гоша...', '-- Ну, будем знакомы, Гошка!', [[poff(10,11); pon(13)]]),
|
||
[13] = _phr('Кхмм...',
|
||
[[-- Какой ты странный... Но это не важно. Мы все здесь -- Илья сделал выразительное лицо -... Мне тут поручили
|
||
распространить приглашения на закрытую лекцию Белина... Только для друзей... Ты мне нравишься, да и по уровню
|
||
доступа проходишь... Так что...]], [[pon(14)]]),
|
||
[14] = _phr('Где он?... Гм.. Где лекция?',
|
||
[[-- Четвертый уровень секретности. Зал 2. Ну, приходи! Хороший шанс приблизиться к... -- Илья посмотрел на один из портретов на стене. -- Да, чуть не забыл -- протягивает он своей гибкой рукой кусок белого
|
||
пластика -- Ну, до встречи!... -- Уххх...]],[[inv():add('invite');return goto('eating');]]),
|
||
}
|
||
};
|
||
kitchen = room {
|
||
nam = 'столовая',
|
||
pic = 'gfx/kitchen.png',
|
||
dsc = 'Небольшой зал столовой.',
|
||
act = function(s, w)
|
||
if w == 4 then
|
||
return 'Я вижу как чьи-то руки берут подносы с грязной посудой и уносят их вглубь...';
|
||
end
|
||
if w == 1 then
|
||
if not have('food') then
|
||
return 'Я присел за свободный столик. Ну -- отдохнул, теперь пора за работу!';
|
||
end
|
||
return goto('eating');
|
||
end
|
||
if w == 2 then
|
||
return 'Гудят как пчелы...';
|
||
end
|
||
if w == 3 and not have('food') then
|
||
return cat([[Я встал в очередь... Взял в руки поднос, столовые приборы и салфетки. Время тянется мучительно долго, но вот, наконец, я заказываю
|
||
еду...^^]], goto('povardlg'));
|
||
end
|
||
end,
|
||
used = function(s, w, ww)
|
||
if w == 1 and ww == 'food' then
|
||
return s:act(1);
|
||
end
|
||
end,
|
||
enter = function(s)
|
||
if not have('mywear') and not have('alienwear') then
|
||
me()._walked = true;
|
||
end
|
||
set_music('mus/foot.mod');
|
||
end,
|
||
exit = function(s, t)
|
||
if have('food') and t ~= 'eating' then
|
||
return 'Уйти с подносом в руках? Не могу.', false;
|
||
end
|
||
if t == 'stolcorridor' then
|
||
set_music('mus/ice.s3m');
|
||
end
|
||
end,
|
||
obj = { 'portrait', vobj(1, 'столики', 'По залу размещены {столы} на 4 или 8 человек.'),
|
||
vobj(2, 'люди', 'Столовая полна {людей}.'),
|
||
vobj(3, 'очередь', '{Очередь} за раздачей еды движется довольно быстро.'),
|
||
vobj(4, 'мойка', 'В углу расположено {окно} для сдачи грязной посуды.'),
|
||
},
|
||
way = { 'stolcorridor' },
|
||
};
|
||
|
||
stolcorridor = room {
|
||
nam = 'вход в столовую',
|
||
pic = 'gfx/kitchencor.png',
|
||
dsc = 'Длинный и узкий коридор тускло освещен флоуресцентным светом.',
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Да, эти люди пришли за тем, чтобы поесть...';
|
||
end
|
||
end,
|
||
obj = {'garderob', vobj(1,'люди', 'По коридору ходят {люди}.')},
|
||
way = {'sside', 'kitchen'},
|
||
exit = function(s, t)
|
||
if t == 'sside' and not have('mywear') and not have('alienwear') then
|
||
return 'На улице холодно... Я не пойду без одежды.. Нет...', false;
|
||
end
|
||
end,
|
||
enter = function(s)
|
||
-- generate garderob
|
||
if have('gun') and not gun._hidden then
|
||
return 'Я боюсь, что мой дробовик там внутри будет вызывать лишние вопросы...', false;
|
||
end
|
||
local i
|
||
for i=1, 8 do
|
||
local o = garderob.obj[i];
|
||
ref(o):disable();
|
||
end
|
||
local k = 7;
|
||
for i=1, 5 do
|
||
if not have('alienwear') or k ~= alienwear._num then
|
||
local o = garderob.obj[k];
|
||
ref(o):enable();
|
||
end
|
||
k = rnd(8);
|
||
end
|
||
end
|
||
};
|
||
|
||
sside = room {
|
||
nam = 'южная сторона',
|
||
pic = 'gfx/sside.png',
|
||
dsc = [[Я нахожусь у южной стены здания института. ]],
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
ways():add('stolcorridor');
|
||
return "Я подошел к подъезду. На двери подъезда надпись -- 'Столовая'. Хм -- зайти внутрь?";
|
||
end
|
||
if w == 2 then
|
||
return 'Те, кто выходят, выглядят более довольными...';
|
||
end
|
||
end,
|
||
way = {'eside','wside'},
|
||
obj = { vobj(1, "подъезд", "У восточного угла находится небольшой {подъезд}."),
|
||
vobj(2, "люди", "Время от времени дверь подъезда хлопает, впуская и выпуская {людей}.")},
|
||
exit = function(s, t)
|
||
if t == 'eside' then
|
||
return 'Если я пойду туда, я попаду в зону видимости пулеметных вышек.', false
|
||
end
|
||
end
|
||
};
|
||
|
||
nside = room {
|
||
nam = 'северная сторона',
|
||
pic = 'gfx/nside.png',
|
||
dsc = 'Я нахожусь у северной стены здания института.',
|
||
way = {'eside','wside' },
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Да -- водосточная труба... Довольно крепкая. Но вряд ли я смогу взобраться по ней наверх.';
|
||
end
|
||
end,
|
||
obj = { vobj(1, 'труба', 'Водосточная {труба} проходит по восточному углу здания.')},
|
||
};
|
||
|
||
|
||
wside = room {
|
||
nam = 'фронтальная сторона',
|
||
pic = 'gfx/wside.png',
|
||
dsc = 'Фронтальная часть института.',
|
||
way = {'entrance', 'nside','sside' },
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Тот самый фургон, с которого все началось...';
|
||
end
|
||
if w == 5 then
|
||
return 'Она начинается слишком высоко, к тому-же снизу она закрыта на замок. Возможно, это будет кому-то полезно при пожаре, хотя я лично сомневаюсь...'
|
||
end
|
||
if w == 2 then
|
||
return 'Наверняка охранники в КПП узнают меня. Лучше я сначала спасу своего Барсика.';
|
||
end
|
||
if w == 3 then
|
||
return 'Красиво сделано, нечего сказать... Но я не могу избавиться от мысли, что институт пожирает входящих в него людей.';
|
||
end
|
||
if w == 4 then
|
||
return 'Уже почти стемнело, но в институт все-еще заходят сотрудники...';
|
||
end
|
||
end,
|
||
obj = { vobj(3, 'вход', 'Главный {вход} представляет собой крутящуюся стеклянную дверь'),
|
||
vobj(4, 'люди', ' впускающую и выпускающую {людей}.'),
|
||
vobj(1, 'фургон', 'Перед входом стоит черный {фургон}.'),
|
||
vobj(2, 'КПП', 'Дальше, в метрах 60 от меня, во все сгущающейся темноте я едва различаю {КПП}.'),
|
||
vobj(5, 'лестница', 'В южной части стены я вижу пожарную {лестницу}, поднимающуюся со второго до пятого этажа.' ),
|
||
}
|
||
};
|
||
|
||
turn1 = obj {
|
||
nam = 'турникеты',
|
||
dsc = 'Проход к лифтам с улицы заграждают блестящие стальные {турникеты}. <<Для всех уровней и категорий>> - светится зеленым надпись на турникетах.',
|
||
act = function(s, w)
|
||
if s._inside then
|
||
s._inside = false;
|
||
here().way:del('lift');
|
||
return 'Я подхожу к турникетам, подношу карточку и выхожу к двери главного входа.';
|
||
end
|
||
if s._unlocked then
|
||
s._inside = true;
|
||
here().way:add('lift');
|
||
return 'Я подхожу к турникетам, подношу карточку и через пару секунд я у лифтов.';
|
||
end
|
||
return 'Я подхожу к одному из аппаратов. Турникеты функционируют автономно. Проход закрыт -- на торце горит красная лампочка.';
|
||
end,
|
||
used = function(s,w)
|
||
if w == 'card' then
|
||
s._unlocked = true;
|
||
s._inside = true;
|
||
here().way:add('lift');
|
||
return 'Я подношу карточку к турникету. Загорается зеленый сигнал. Проход открыт! Я прохожу к лифтам.';
|
||
end
|
||
end
|
||
};
|
||
|
||
lustra = obj {
|
||
nam = 'люстры',
|
||
dsc = 'Над головой висят прекрасные сверкающие {люстры}.',
|
||
act = 'Не могу на них наглядеться... Наверное, это хрусталь?';
|
||
|
||
};
|
||
|
||
divan = obj {
|
||
nam = 'диван',
|
||
dsc = 'На противоположной стороне от охранника, в углу стоит {диван}.',
|
||
act = function(s)
|
||
return 'Черный кожаный, очень мягкий диван.';
|
||
end,
|
||
};
|
||
|
||
entrance = room {
|
||
nam = 'главный вход',
|
||
pic = 'gfx/entrance.png',
|
||
dsc = 'Первый этаж института поражает своим великолепием.',
|
||
act = function(s, w)
|
||
if w == 2 then
|
||
return 'Ворота заперты. На них висит замок.';
|
||
end
|
||
if w == 3 then
|
||
if not turn1._inside then
|
||
return 'К лифтам мне мешают пройти турникеты.';
|
||
end
|
||
return 'Четыре лифта явно не справляются с количеством сотрудников института.';
|
||
end
|
||
if w == 4 then
|
||
return 'Стеклянный или хрустальный стол, за которым стоит терминал...';
|
||
end
|
||
if w == 5 then
|
||
return 'Лучше я не буду лишний раз попадаться ему на глаза. Вряд ли он мне поможет.';
|
||
end
|
||
if w == 6 then
|
||
return 'Люди.. Я отвык от такого количества людей.';
|
||
end
|
||
end,
|
||
obj = {
|
||
'lustra',
|
||
vobj(2, 'ворота', 'Железные {ворота}, ведущие к путям, занимают всю восточную стену.'),
|
||
vobj(3, 'лифты', 'Среднюю часть этажа занимают четыре {лифта}.'),
|
||
'turn1',
|
||
vobj(4, 'стол', 'Перед турникетами находится {стол},'),
|
||
vobj(5, 'охранник', 'за которым сидит {охранник}.'),
|
||
vobj(6, 'люди', 'В институт входят и выходят {люди}, образовывая очереди у лифтов.'),
|
||
'divan',
|
||
},
|
||
way = { 'wside' },
|
||
enter = function(s, f)
|
||
if have('gun') and f == 'wside' and not gun._hidden then
|
||
return 'Мне кажется, там внутри возникнет множество вопросов по-поводу моего дробовика... Я должен его как-то спрятать.', false
|
||
end
|
||
end,
|
||
exit = function(s, t)
|
||
if t == 'wside' then
|
||
turn1._inside = false;
|
||
s.way:del('lift');
|
||
end
|
||
end,
|
||
};
|
||
|
||
pinlift = obj {
|
||
nam = function(s)
|
||
if s._num == 3 then
|
||
return '';
|
||
end
|
||
return 'люди';
|
||
end,
|
||
act = function(s)
|
||
return 'Подавленные и пустые взгляды... Тягостное молчание.';
|
||
end,
|
||
dsc = function(s)
|
||
if s._num == 1 then
|
||
return 'В лифте полно {людей}.';
|
||
end
|
||
if s._num == 2 then
|
||
return 'В лифте несколько {человек}.';
|
||
end
|
||
if s._num == 3 then
|
||
return 'Лифт пуст.'
|
||
end
|
||
end
|
||
};
|
||
|
||
lift = room {
|
||
nam = 'лифт',
|
||
pic = 'gfx/lift.png',
|
||
dsc = 'В лифте должно быть светло и уютно, но меня мучает клаустрофобия. На панели я вижу кнопки:',
|
||
enter = function(s, t)
|
||
if here() == entrance then
|
||
s._from = 1;
|
||
pinlift._num = 1;
|
||
return 'Я дожидаюсь, когда подойдет один из лифтов и захожу внутрь.';
|
||
end
|
||
pinlift._num = rnd(3);
|
||
if here() == floor2 then
|
||
s._from = 2;
|
||
elseif here() == floor3 then
|
||
s._from = 3;
|
||
elseif here() == floor4 then
|
||
s._from = 4;
|
||
elseif here() == floor5 then
|
||
s._from = 5;
|
||
end
|
||
return 'Я нажимаю кнопку вызова лифта и жду. Проходит некоторое время и я захожу внутрь.';
|
||
end,
|
||
act = function(s, w)
|
||
local to,st
|
||
if not tonumber(w) then
|
||
return
|
||
end
|
||
if w == s._from then
|
||
return cat('Нет!!! Клаустрофобия выгоняет меня из лифта.^^', back());
|
||
end
|
||
if w == 8 then
|
||
st = '';
|
||
if galstuk._wear then
|
||
st = ' К тому же, я в галстуке.';
|
||
end
|
||
if me()._brit then
|
||
return 'Я смотрю в зеркало и вижу усталое, но гладко-выбритое лицо. Это я.'..st;
|
||
end
|
||
return 'Я смотрю в зеркало и вижу усталое, заросшее щетиной лицо. Это я.'..st;
|
||
end
|
||
if w == 6 or w == 7 then
|
||
return 'Я нервничаю... Не надо нервов.';
|
||
end
|
||
if w == 1 then
|
||
to = 'entrance';
|
||
else
|
||
to = 'floor'..w;
|
||
end
|
||
return cat('Я нажимаю кнопку и жду. Меня мучает клаустрофобия, но я жду.. Уххх... Приехали!^^',
|
||
goto(to));
|
||
end,
|
||
exit = function()
|
||
return 'За моей спиной закрываются двери лифта.';
|
||
end,
|
||
obj = {
|
||
vobj(1,'1', '{1},'),
|
||
vobj(2,'2', '{2},'),
|
||
vobj(3,'3', '{3},'),
|
||
vobj(4,'4', '{4},'),
|
||
vobj(5,'5', '{5},'),
|
||
vobj(6,'стоп','{стоп}'),
|
||
vobj(7,'ход','и {ход}.'),
|
||
vobj(8,'зеркало', '{Зеркало} занимает всю заднюю часть.'),
|
||
'pinlift',
|
||
},
|
||
};
|
||
|
||
floor2 = room {
|
||
nam = 'площадка 2-го этажа',
|
||
pic = 'gfx/floor2.png',
|
||
dsc = "На площадке второго этажа нет окон. Невысокий потолок и серо-зеленые стены. Тихо и холодно.",
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Дверь, похоже, сделана из свинца... Я не вижу возможности попасть внутрь. И хорошо. На двери, кроме знака надпись -- <<Уровень:2 Категория:Ядерная энергия>>.';
|
||
end
|
||
if w == 2 then
|
||
return 'Да, на одном из этих лифтов я приехал на этот проклятый этаж...';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1, 'дверь', 'Я вижу массивную {дверь} с знаком <<осторожно - радиация!!!>>'),
|
||
vobj(2, 'лифты', 'Кажется, что четыре проема дверей {лифтов} мрачно следят за мной.'),
|
||
},
|
||
way = { 'lift' },
|
||
};
|
||
|
||
resh = obj {
|
||
nam = 'решетка',
|
||
dsc = function(s)
|
||
if not s._unscrew then
|
||
return 'Отверстие закрыто железной {решеткой}.';
|
||
end
|
||
if vent._off then
|
||
return 'В отверстии видны лопасти большого вентилятора. На полу валяется {решетка}.';
|
||
end
|
||
return 'В отверстии вращаются лопасти большого вентилятора. На полу валяется {решетка}.';
|
||
end,
|
||
act = function(s)
|
||
if s._unscrew then
|
||
return 'Вот что можно сделать обычным тупым ножом при наличии сноровки и терпения!';
|
||
end
|
||
if not stoly._moved then
|
||
return 'Не достать...';
|
||
end
|
||
return 'Решетка крепко привинчена 12 шурупами...';
|
||
end,
|
||
used = function(s, w)
|
||
if w == 'knife' and not s._unscrew and stoly._moved then
|
||
s._unscrew = true;
|
||
return 'Я встаю на стол и долго пытаюсь открутить шурупы ножом. Наконец, мне это удается. Решетка падает на пол. Я спускаюсь со стола.';
|
||
end
|
||
if w ~= 'stol' then
|
||
return 'Не получится...';
|
||
end
|
||
end,
|
||
};
|
||
|
||
vent = obj {
|
||
nam = 'вентиляция',
|
||
dsc = 'В центре потолка находится большое квадратное вентиляционное {отверстие}.',
|
||
act = function(s)
|
||
if not stoly._moved then
|
||
return 'До него не достать...';
|
||
end
|
||
if not resh._unscrew then
|
||
return 'Я встаю на стол и изучаю отверстие. Оно закрыто решеткой... Я разочарованно спускаюсь на пол.';
|
||
end
|
||
if not s._off then
|
||
return 'Я встаю на стол и смотрю на острые лопасти вентилятора. Боюсь, это слишком опасно...';
|
||
end
|
||
if not s._trap then
|
||
return 'Я встаю на стол, хватаюсь руками за края отверстия и подтягиваюсь... Темно и сыро. Я пытаюсь забраться внутрь вентиляции, когда вдруг перед моими глазами я вижу красные глазки и зубы жирной крысы... Нет!!! Я падаю обратно на стол и скатываюсь на пол.';
|
||
end
|
||
-- here we go!
|
||
return goto('toilet');
|
||
end,
|
||
|
||
used = function(s, w)
|
||
if w == 'stol' then
|
||
return
|
||
end
|
||
if not stoly._moved then
|
||
return 'Я не могу добраться до отверстия...';
|
||
end
|
||
if not resh._unscrew then
|
||
return 'Отверстие закрыто решеткой...';
|
||
end
|
||
if not s._off then
|
||
return 'Мне мешают лопасти вентилятора...';
|
||
end
|
||
if w == 'gun' and not s._trap then
|
||
gun._loaded = false;
|
||
return 'Я встаю на стол и просовываю руку с дробовиком в отверстие. Оба ствола выстреливают одновременно с глухим звуком. Я прислушиваюсь. В отверстии тихо... Я спускаюсь со стола на пол. Я думаю, это бесполезно...';
|
||
end
|
||
if w == 'trap' then
|
||
if not trap._salo then
|
||
return 'Я устанавливаю капкан на край отверстия. Жду. Но крыса не дура -- я забираю капкан обратно. Нужна приманка.';
|
||
end
|
||
inv():del('trap');
|
||
vent._trap = true;
|
||
return 'Я встаю на стол и устанавливаю капкан-мышеловку на край отверстия... Мне не приходится долго ждать... Лязг железа и визг крысы красноречиво говорит о том, что дело сделано!';
|
||
end
|
||
end,
|
||
obj = {
|
||
'resh'
|
||
}
|
||
};
|
||
|
||
stol = obj {
|
||
nam = 'стол',
|
||
inv = 'Я держу один из столов за угол. Дуб.',
|
||
use = function(s, w)
|
||
if w == 'vent' or w == 'resh' then
|
||
inv():del('stol');
|
||
stoly._moved = true;
|
||
return 'Напрягая свои силы, я сдвигаю один из столов в центр комнаты.';
|
||
end
|
||
end
|
||
};
|
||
|
||
stoly = obj {
|
||
nam = 'столы',
|
||
dsc = function(s, w)
|
||
if not s._moved then
|
||
return 'Четыре дубовых {стола} занимают все углы комнаты.';
|
||
end
|
||
return 'Три дубовых {стола} стоят в углах комнаты. Один стол передвинут в центр комнаты.';
|
||
end,
|
||
act = function(s, w)
|
||
if s._moved then
|
||
return 'Поставить один стол на другой? Нет -- я не смогу...';
|
||
end
|
||
inv():add('stol');
|
||
return [[Добротная мебель... Но стол в моей хижине лучше -- я сделал его своими руками. Я держу
|
||
руками угол стола.]];
|
||
end
|
||
};
|
||
|
||
eroom = room {
|
||
nam = 'отдел СТО',
|
||
pic = function()
|
||
if not stoly._moved then
|
||
return 'gfx/sto.png';
|
||
end
|
||
if not resh._unscrew then
|
||
return 'gfx/sto2.png';
|
||
end
|
||
return 'gfx/sto3.png';
|
||
|
||
end,
|
||
dsc = [[Я нахожусь в небольшой комнате с бежевыми стенами.]],
|
||
enter = function(s, f)
|
||
if f == 'cor3' then
|
||
return [[Открыв дверь, я заглядываю внутрь комнаты. Ухх... Пусто! Можно осмотреться...]];
|
||
end
|
||
if f == 'toilet' then
|
||
return 'Ну что же... Я поднимаю железную решетку в полу туалета и лезу в темноту... Через несколько минут я уже спрыгиваю из вентиляционного отверстия на стол, и спускаюсь на пол.';
|
||
end
|
||
end,
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Отодвинув жалюзи я смотрю в уже черную даль, но наталкиваюсь на свое тусклое отражение. Опустив глаза вниз я вижу пулеметные вышки и железнодорожные пути.';
|
||
end
|
||
if w == 2 then
|
||
return 'Это всего лишь терминалы. Клиенты, которые подсоединяются к серверам института. Впрочем, меня это не интересует -- я 10 лет не видел компьютеров.';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1, 'окно', 'Большое {окно} выходит на восток.'),
|
||
'stoly',
|
||
vobj(2, 'терминалы', 'На каждом столе стоит 17 дюймовый {терминал}.'),
|
||
'vent',
|
||
'portrait',
|
||
},
|
||
way = { 'cor3' },
|
||
exit = function()
|
||
inv():del('stol');
|
||
end
|
||
};
|
||
|
||
key = obj {
|
||
nam = 'ключ',
|
||
dsc = 'В двери торчит {ключ}.',
|
||
tak = 'Я осторожно вытаскиваю ключ и кладу его в карман.',
|
||
inv = 'Удивительно, но в институте вместе с электроникой используется такой простой и понятный механизм, как обычный дверной замок!',
|
||
};
|
||
|
||
room33 = room {
|
||
nam = 'комната',
|
||
pic = 'gfx/bholes.png',
|
||
dsc = [[Постояв несколько секунд у двери я открываю ее и вхожу внутрь.]],
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return cat('Седой человек в толстых очках оборачивается и с секунду смотрит на меня. -- Кто это? Выйдите немедленно!!^^',back());
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1, 'люди', [[Я вижу как группа {людей} в белых халатах расположилась перед доской в центре комнаты и о чем-то ожесточенно спорит.]]),
|
||
'portrait',
|
||
'key'
|
||
};
|
||
way = { 'cor3' },
|
||
exit = [[ Я осторожно выхожу из комнаты.]];
|
||
};
|
||
room3x = room {
|
||
nam = 'комната',
|
||
enter = function(s, f)
|
||
if s._num == 2 then
|
||
return [[Я приоткрываю дверь и заглядываю внутрь. Квадратная комната с двумя окнами.
|
||
Множество людей сидят за терминалами, расставленными вдоль стен. Я поскорее прикрываю дверь.]], false;
|
||
end
|
||
if s._num == 4 then
|
||
return [[Я берусь за холодный металл ручки и осторожно открываю дверь... -- Идет моделирование!!!
|
||
-- слышу я из-за двери. Я быстро отпускаю ручку -- дверь закрывается...]],false;
|
||
end
|
||
if s._num == 5 then
|
||
ref(f).way:add('eroom');
|
||
return goto('eroom'), false;
|
||
end
|
||
if s._num == 6 then
|
||
return [[Я начинаю открывать дверь, когда вдруг начинаю слышать странное все нарастающее гудение. -- Какой идиот не закрыл дверь? -- слышу я изнутри. Я поспешно отхожу от двери.]], false;
|
||
end
|
||
end,
|
||
};
|
||
switch = obj {
|
||
nam = 'выключатель',
|
||
dsc = function(s)
|
||
local t
|
||
if vent._off then
|
||
t = ' в позиции <<выключено>>.';
|
||
else
|
||
t = ' в позиции <<включено>>.';
|
||
end
|
||
return 'В углу, перед входной дверью находится {выключатель}'..t;
|
||
end,
|
||
act = function(s)
|
||
if vent._off then
|
||
vent._off = false;
|
||
return 'Включаю!'
|
||
end
|
||
if not cor3._locked then
|
||
return [[Я перевожу выключатель в позицию <<выключено>> и иду вдоль стен, когда
|
||
одна из дверей за мной вдруг открывается и старческий голос звучит на весь коридор -- Безобразие!!! Включите обратно!!! --
|
||
мне приходится вернуться к выключателю и перевести его в позицию <<включено>>.]];
|
||
end
|
||
vent._off = true;
|
||
return 'Выключаю!';
|
||
end
|
||
};
|
||
|
||
cor3 = room {
|
||
nam = 'коридор 3-го этажа',
|
||
pic = 'gfx/cor3.png',
|
||
enter = function(s, f)
|
||
if f == 'floor3' then
|
||
return 'Я подношу карточку к считывателю... Красная лампочка сначала моргает, а затем меняет свой цвет на зеленый... Проход открыт!';
|
||
end
|
||
end,
|
||
dsc = 'Длинный коридор идет до самой стены здания. На потолке тускло горят лампы дневного света. На полу постелена зеленая ковровая дорожка.',
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Я подхожу к одной из дверей и заглядываю в окошко-иллюминатор... Люди в белых костюмах, словно пчелы, снуют у причудливых аппаратов. -- Наверное, это лаборатории -- догадываюсь я.';
|
||
end
|
||
if not tonumber(w) then
|
||
return nil, false
|
||
end
|
||
if w == 3 then
|
||
if s._locked then
|
||
return 'Эта комната закрыта... И слыша приглушенные, но настойчивые звуки изнутри, мне не хочется ее открывать.';
|
||
end
|
||
return goto('room33');
|
||
end
|
||
if tonumber(w) >=2 and tonumber(w) <=6 then
|
||
room3x._num = w;
|
||
return goto('room3x');
|
||
end
|
||
if w == 7 then
|
||
return 'Окно выходит на южную сторону... Темно -- ничего не видно, кроме снежинок, ударяющихся о стекло...';
|
||
end
|
||
if w == 8 then
|
||
return 'Зайти?';
|
||
end
|
||
end,
|
||
used = function(s, w, ww)
|
||
if w == 1 or w == 2 or w == 4 or w == 5 or w == 6 then
|
||
return 'Не подходит...';
|
||
end
|
||
if w == 3 and ww == 'key' then
|
||
if s._locked then
|
||
return 'Уже закрыто...';
|
||
end
|
||
s._locked = true;
|
||
return 'Я вставляю ключ в замочную скважину и закрываю замок на два оборота. Вынимаю ключ и кладу обратно в карман.';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1, 'белые двери', 'По правой стороне коридора находятся белые металлические {двери} с стеклянными окошками.'),
|
||
vobj(2, 'гравитация', 'По левой стороне коридора я вижу несколько дверных проемов с надписями: {гравитация},'),
|
||
vobj(4, 'моделирование','{моделирование},'),
|
||
vobj(5, 'эффекты СТО','{эффекты СТО},'),
|
||
vobj(3, 'черные дыры', '{черные дыры},'),
|
||
vobj(6, 'квазипространство', '{квазипространство}.'),
|
||
vobj(7, 'окно', 'В конце коридора виднеется {окно}.'),
|
||
vobj(8, 'туалет', 'Возле окна находятся {туалеты}.'),
|
||
'switch',
|
||
'portrait',
|
||
},
|
||
way = {'floor3', 'toilet3', 'toiletw'},
|
||
};
|
||
|
||
mylo = obj {
|
||
nam = 'мыло',
|
||
inv = function(s)
|
||
if s._pena then
|
||
return 'Кусочек мыла в пене.';
|
||
end
|
||
return 'Кусочек мыла.';
|
||
end,
|
||
dsc = 'На умывальнике лежит кусочек {мыла}.',
|
||
tak = 'Я взял в руки скользкий кусочек мыла... Он выпал в умывальник, но я поймал его снова и сунул в карман...';
|
||
};
|
||
|
||
sushka = obj {
|
||
nam = 'сушка',
|
||
dsc = 'Рядом с умывальником находится {сушка}.',
|
||
act = function(s,w)
|
||
return 'Я подношу руки к сушке, сушка включается... Наваждение...';
|
||
end,
|
||
};
|
||
|
||
umyvalnik = obj {
|
||
nam = 'умывальник',
|
||
dsc = 'У входа находится {умывальник}.',
|
||
act = function(s)
|
||
if me()._mylo then
|
||
me()._mylo = false;
|
||
return 'Я смываю мыло со своего лица...';
|
||
end
|
||
return 'Я пью хлорированную воду жадными глотками... Да -- это не та вода из ручья, которую я пью в лесу...';
|
||
end,
|
||
used = function(s, w)
|
||
if w == 'mylo' then
|
||
mylo._pena = true;
|
||
return 'Я опускаю мыло в теплую воду...';
|
||
end
|
||
end
|
||
};
|
||
|
||
toilet3 = room {
|
||
nam = 'туалет',
|
||
pic = 'gfx/toil3.png',
|
||
dsc = 'Я в туалете. Стандартная архитектура. Без окон. Белый кафель.',
|
||
act = function(s, w)
|
||
if w == 2 then
|
||
return 'Все заняты!';
|
||
end
|
||
if w == 3 then
|
||
return 'Люди равномерно распределены по туалету. Все унитазы заняты. Еще пару человек ждут своей очереди.';
|
||
end
|
||
end,
|
||
obj = {
|
||
'umyvalnik',
|
||
'mylo',
|
||
'tzerkalo',
|
||
'sushka',
|
||
vobj(2, 'унитазы', 'В этом туалете установлено 4 {унитаза}.'),
|
||
vobj(3, 'люди', 'В туалете несколько {человек}...'),
|
||
},
|
||
way = { 'cor3' },
|
||
exit = function()
|
||
if me()._mylo then
|
||
return 'В мыле? Нет...', false
|
||
end
|
||
objs():del('face');
|
||
end
|
||
};
|
||
floor3 = room {
|
||
nam = 'площадка 3-го этажа',
|
||
pic = 'gfx/floor3.png',
|
||
dsc = [[На
|
||
площадке третьего этажа довольно просторно. Бежевые стены. Высокие потолки.]],
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'С минуту я зачарованно смотрю в окно... Белая пустыня погруженная в темноту... В эту минуту я понимаю, в какое чужое место я попал...';
|
||
end
|
||
if w == 2 then
|
||
if not s._unlocked then
|
||
return 'Металл обитый кожей. Дверь снабжена считывателем электронных карт. Надпись на двери: <<Уровень:3 Категория: Прикладная физика>>';
|
||
end
|
||
return goto('cor3');
|
||
end
|
||
if w == 3 then
|
||
return 'Крепкие тут двери, не то что в моей хижине... Считыватель карточек возле замка. Надпись на двери: <<Уровень:3 Категория:Нанотехнологии>>';
|
||
end
|
||
end,
|
||
used = function(s,w,ww)
|
||
if ww ~= 'card' then
|
||
return 'Это не поможет...';
|
||
end
|
||
if w == 2 then
|
||
s._unlocked = true;
|
||
s.way:add('cor3');
|
||
return goto('cor3');
|
||
end
|
||
if w == 3 then
|
||
return 'Я подношу карточку к считывателю... Раздается раздражающий писк -- доступ не разрешен.';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1, 'окно', 'Широкое {окно} выходит на запад.'),
|
||
vobj(2, 'коричневая дверь', 'Справа от окна находится коричневая {дверь}.'),
|
||
vobj(3, 'белая дверь', 'Слева -- белая {дверь}.'),
|
||
},
|
||
way = { 'lift' },
|
||
};
|
||
|
||
britva = obj {
|
||
nam = 'бритва',
|
||
dsc = 'На умывальнике лежит безопасная {бритва}.',
|
||
tak = 'Я незаметно кладу бритву в карман.',
|
||
inv = 'Бритва, немного ржавое лезвие...',
|
||
};
|
||
|
||
face = obj {
|
||
nam = 'лицо',
|
||
dsc = 'В зеркале отражается мое {лицо}.',
|
||
act = function(s)
|
||
local st = '';
|
||
if me()._brit then
|
||
st = ' Гладко выбритое.';
|
||
elseif me()._mylo then
|
||
st = ' Все в мыле.';
|
||
end
|
||
if galstuk._wear then
|
||
st = st..' К тому же, в галстуке.';
|
||
end
|
||
return 'Это мое лицо, отраженное в зеркале.'..st;
|
||
end,
|
||
used = function(s, w)
|
||
if w == 'mylo' then
|
||
if me()._brit then
|
||
return 'Я уже брился...';
|
||
end
|
||
if not mylo._pena then
|
||
return 'Мыло совсем сухое...';
|
||
end
|
||
if not have('britva') then
|
||
return 'Я намыливаю лицо и смываю грязь... Фуххх....';
|
||
end
|
||
me()._mylo = true;
|
||
return 'Я намыливаю лицо...';
|
||
end
|
||
if w == 'britva' then
|
||
if me()._brit then
|
||
return 'Я уже брился...';
|
||
end
|
||
if not me()._mylo then
|
||
return 'Я не намылил лицо...';
|
||
end
|
||
me()._brit = true;
|
||
me()._mylo = false;
|
||
return 'Я бреюсь... Через несколько минут я смываю мыло...';
|
||
end
|
||
end
|
||
};
|
||
|
||
tzerkalo = obj {
|
||
nam = 'зеркало',
|
||
dsc = 'Над умывальником установлено {зеркало}.',
|
||
act = function(s)
|
||
local st = '';
|
||
objs():add('face');
|
||
if galstuk._wear then
|
||
st = ' К тому же, в галстуке...';
|
||
end
|
||
if me()._brit then
|
||
return 'Грустное, но гладко выбритое лицо.'..st;
|
||
end
|
||
return 'Дикое, заросшее щетиной лицо смотрит из зеркала.'..st;
|
||
end,
|
||
};
|
||
|
||
toilet = room {
|
||
nam = 'туалет',
|
||
pic = 'gfx/toil4.png',
|
||
dsc = 'Довольно просторный туалет. Белый кафель. Желтые разводы. Сырость и звуки журчащей воды. Деревянная дверь ведет в коридор.',
|
||
enter = function(s, f)
|
||
if f == 'eroom' then
|
||
return 'Я лезу в вентиляционное отверстие. Внутри пыльно и тихо. Я блуждаю по причудливым переплетениям вентиляции пока, наконец, не вижу над головой свет. Еще мгновение и я выталкиваю железную решетку в полу туалета...';
|
||
end
|
||
end,
|
||
act = function(s, w)
|
||
if w == 2 then
|
||
return 'Да... Мне повезло, я чувствую, что туалет мужской...';
|
||
end
|
||
if w == 3 then
|
||
return 'Странная у них система вентиляции, но благодаря ей я здесь!...';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(2, 'унитазы', 'В этом туалете установлено всего 2 {унитаза}.'),
|
||
'umyvalnik',
|
||
'britva',
|
||
'tzerkalo',
|
||
'sushka',
|
||
vobj(3, 'решетка', 'На полу находится железная {решетка}.'),
|
||
},
|
||
way = { 'eroom', 'cor4'},
|
||
exit = function(s, t)
|
||
if me()._mylo then
|
||
return 'В мыле? Нет...', false
|
||
end
|
||
objs():del('face');
|
||
if t ~= 'eroom' then
|
||
return 'Я осторожно выхожу из туалета.';
|
||
end
|
||
end
|
||
};
|
||
|
||
toiletw = room {
|
||
nam = 'женский туалет',
|
||
enter = function(s, w)
|
||
return 'Фууххх... Чуть не ошибся...', false;
|
||
end
|
||
};
|
||
|
||
function room4x_hear()
|
||
local ph = {
|
||
[1] = '...Согласно соотношению неопределенностей мы не можем одновременно измерить координату частицы и ее импульс...',
|
||
[2] = '...Мгновенная передача возмущения волновой функции не есть передача сигнала, ибо здесь нет физических объектов, движущихся быстрее света...',
|
||
[3] = '...Редукция фон Неймана — мгновенное изменение описания квантового состояния (волновой функции) объекта, происходящее при измерении...',
|
||
[4] = '...Допустим, две одинаковые частицы A и B образовались в результате распада третьей частицы C. В этом случае, по закону сохранения импульса, их суммарный импульс p_A + p_B должен быть равен исходному импульсу третьей частицы p_C...',
|
||
[5] = '...представим себе, что на двух планетах в разных концах Галактики есть две монетки, выпадающие всегда одинаково. Если запротоколировать результаты всех подбрасываний, а потом сравнить их, то они совпадут. Сами же выпадания случайны, на них никак нельзя повлиять. Нельзя, например, договориться, что орёл — это единица, а решка — это ноль, и передавать таким образом двоичный код. Ведь последовательность нулей и единиц будет случайной и на том и на другом <<конце провода>> и не будет нести никакого смысла...';
|
||
[6] = '...Впервые ЭПР-парадокс был сформулирован Альбертом Эйнштейном в 1928 году на 5-ом Сольвеевском конгрессе, в дискуссии с Нильсом Бором. Эйнштейн не признавал вероятностного характера квантовой механики и считал вероятностное описание микромира неполным...',
|
||
[7] = '...это интерпретация квантовой механики, которая предполагает существование <<параллельных вселенных>>, в каждой из которых действуют одни и те же законы природы и которым свойственны одни и те же мировые постоянные, но которые находятся в различных состояниях...',
|
||
[8] = 'Докторская работа Эверетта как раз и предлагала подобную альтернативу. Эверетт предложил считать, что для составной системы (каковой является частица, взаимодействующая с измерительным прибором) утверждение о том, что какая-либо подсистема находится в определённом состоянии, является бессмысленным. Это привело Эверетта к заключению об относительном характере состояния одной системы по отношению к другой...',
|
||
[9] = '...Этот шестимерный объект можно представить в виде суперпозиции двух <<альтернативных историй>> системы S, в одной из которых наблюдался результат измерения <<вверх>>, а в другой — <<вниз>>...',
|
||
[10] = '...Например, можно приготовить две частицы, находящиеся в едином квантовом состоянии так, что когда одна частица наблюдается в состоянии со спином, направленным вверх, то спин другой оказывается направленным вниз, и наоборот, и это несмотря на то, что согласно квантовой механике, предсказать, какие фактически каждый раз получатся направления, невозможно...',
|
||
};
|
||
return ph[rnd(10)];
|
||
end
|
||
|
||
room4x = room {
|
||
nam = 'комната',
|
||
enter = function(s, f)
|
||
if s._num == 1 then
|
||
return 'Я осторожно берусь за ручку и пытаюсь открыть дверь. Закрыто...', false;
|
||
elseif s._num == 2 then
|
||
return 'Я подхожу к двери и прислушиваюсь... -- '..room4x_hear()..' --- Ухх... Я отхожу от двери..', false;
|
||
elseif s._num == 3 then
|
||
return 'Я подхожу к двери и прислушиваюсь... -- Внутри я слышу, как кто-то ожесточенно спорит... -- я отхожу от двери...', false;
|
||
elseif s._num == 4 then
|
||
return 'Открыв дверь я захожу внутрь. На меня пристально смотрят 12 пар глаз сидящих за столами. . Еще одна пара глаз принадлежит человеку у доски. -- Простите, ошибся -- бормочу я и выхожу из комнаты...', false;
|
||
elseif s._num == 5 then
|
||
return 'Закрыто... ', false;
|
||
end
|
||
end,
|
||
};
|
||
|
||
galstuk = obj {
|
||
nam = function(s)
|
||
if s._gal then
|
||
return 'галстук';
|
||
end
|
||
return 'тряпка';
|
||
end,
|
||
inv = function(s, w)
|
||
if not s._gal then
|
||
s._gal = true;
|
||
return 'Я рассматриваю тряпку и понимаю, что когда-то это было галстуком.';
|
||
end
|
||
if s._hot then
|
||
if not s._wear then
|
||
s._wear = true;
|
||
return 'Я с достоинством надеваю галстук...';
|
||
end
|
||
return 'Галстук надет...';
|
||
end
|
||
if s._mylo then
|
||
return 'Он весь в мыле!';
|
||
end
|
||
if not s._water then
|
||
return 'Он грязный! Я не надену это!';
|
||
end
|
||
if not s._hot then
|
||
return 'Он мокрый! Я не надену это!';
|
||
end
|
||
end,
|
||
used = function(s, w)
|
||
if s._wear then
|
||
return 'Галстук надет...';
|
||
end
|
||
if w == 'mylo' then
|
||
if not mylo._pena then
|
||
return 'Мыло сухое...';
|
||
end
|
||
s._mylo = true;
|
||
if not s._gal then
|
||
s._gal = true;
|
||
return 'Намыливая тряпку, я понимаю, что когда-то это было галстуком.';
|
||
end
|
||
return 'Я намылил галстук...';
|
||
end
|
||
end,
|
||
use = function(s, w)
|
||
if s._wear and w ~= 'hand' then
|
||
return 'Галстук надет...', false;
|
||
end
|
||
if w == 'umyvalnik' then
|
||
if not s._mylo then
|
||
return 'Просто водой? Вряд ли это отмоет мел...';
|
||
end
|
||
s._water = true;
|
||
s._mylo = false;
|
||
return 'Я помыл галстук в теплой воде...';
|
||
end
|
||
if w == 'sushka' then
|
||
if not s._water then
|
||
return 'Зачем мне сушить это?';
|
||
end
|
||
s._hot = true;
|
||
s._water = false;
|
||
return 'Через 5 минут я полностью высушил галстук...';
|
||
end
|
||
end
|
||
};
|
||
|
||
room46 = room {
|
||
nam = 'аудитория 6',
|
||
pic = 'gfx/room4.png',
|
||
enter = 'Я открываю дверь и вхожу внутрь... Комната пуста...',
|
||
dsc = 'Я нахожусь внутри аудитории... Несколько столов стоят в два ряда по направлению к доске.',
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
if not have('galstuk') then
|
||
inv():add('galstuk');
|
||
return 'На доске лежит тряпка. Я беру ее в руки.';
|
||
end
|
||
return 'Гм... Ничего не понимаю...';
|
||
end
|
||
if w == 2 then
|
||
return 'Внизу я вижу, как следы прожекторов шарят по снежному полю...';
|
||
end
|
||
if w == 3 then
|
||
return 'Я сажусь за клавиатуру, но вовремя вспоминаю, что я завязал с прошлым... Я больше не хакер - я лесник.';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(3,'терминал', 'На каждом столе стоит {терминал}.'),
|
||
vobj(1,'доска', 'На {доске} написаны какие-то формулы...'),
|
||
vobj(2,'окно', '{Окно} выходит на восток.'),
|
||
'portrait',
|
||
},
|
||
way = { 'cor4' },
|
||
};
|
||
|
||
facectrl = dlg {
|
||
nam = 'фэйсконтроль',
|
||
pic = 'gfx/guard4.png',
|
||
dsc = 'Я вижу перед собой неприятное лицо полного охранника.',
|
||
obj = {
|
||
[1] = phr('Я пришел послушать лекцию Белина...',
|
||
'-- Я не знаю кто вы -- ухмыляется охранник -- но мне велели пускать сюда только приличных людей.',
|
||
[[pon(2);]]),
|
||
[2] = _phr('У меня есть приглашение!',
|
||
'-- А мне плевать! Посмотри на себя в зеркало!!! Ты пришел слушать самого Белина -- правую руку самого... -- охранник почтительно помолчал -- Так что пошел вон..', [[pon(3,4)]]),
|
||
[3] = _phr('Сейчас я дам тебе по роже!', '-- Ну все... Мощные руки выталкивают меня в коридор...',
|
||
[[poff(4)]]),
|
||
[4] = _phr('Ты, кабан! Я же тебе сказал -- у меня есть приглашение!',
|
||
'-- Чтоооооо? Глаза охранника наливаются кровью... Мощный пинок отправляет меня в коридор...',
|
||
[[poff(3)]]),
|
||
[5] = _phr('Я хочу послушать лекцию Белина...',
|
||
'-- Во-первых -- доктора Белина, а во-вторых -- без галстука нельзя...',
|
||
[[pon(2)]]),
|
||
[6] = _phr('Я очень хочу послушать лекцию доктора Белина!!!',
|
||
'Охранник смотрит на меня пристальным взглядом и нехотя произносит. -- Ваше приглашение...',
|
||
[[pon(7)]]),
|
||
[7] = _phr('Держи... св... пожалуйста...', 'Ладно... Проходите, не задерживайтесь... Лекция уже началась...',
|
||
[[inv():del('invite'); return goto('hall42')]]);
|
||
},
|
||
exit = function(s,w)
|
||
s:pon(1);
|
||
end
|
||
};
|
||
|
||
hall42 = room {
|
||
nam = 'Зал 2',
|
||
pic = 'gfx/hall2.png',
|
||
dsc = 'Множество людей. Судя по тишине -- лекция уже идет.',
|
||
obj = {
|
||
vobj(1, 'Белин', 'Перед доской стоит {Белин} -- тот самый человек, который забрал моего кота.'),
|
||
vobj(2, 'места', 'В третьем ряду с краю я вижу несколько свободных {мест}.'),
|
||
vobj(3, 'окно', 'Три широких {окна} выходят на запад.'),
|
||
vobj(4, 'лампы', 'Зал освещают флоуресцентные {лампы}.'),
|
||
},
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Сейчас он без пальто и шляпы и я могу его рассмотреть... Довольно полный, но высокий... Хитрая улыбка, но лицо открытое... Он ведет лекцию -- подожду пока она закончится и поговорю с ним...';
|
||
end
|
||
if w == 2 then
|
||
return goto('lection');
|
||
end
|
||
if w == 3 then
|
||
return 'За окнами тьма... Только белые снежинки изредка попадают в зону освещения флоуресцентных ламп.';
|
||
end
|
||
if w == 4 then
|
||
return 'Шесть ламп... Ненавижу этот мерцающий свет...';
|
||
end
|
||
end,
|
||
exit = function(s, t)
|
||
if t == 'cor4' then
|
||
return 'Не хочу терять Белина из виду...', false;
|
||
end
|
||
end,
|
||
enter = function(s, f)
|
||
if f == 'facectrl' then
|
||
return 'Я прохожу в лекционный зал...';
|
||
end
|
||
if not galstuk._wear then
|
||
facectrl:pon(5);
|
||
facectrl:poff(1);
|
||
end
|
||
if not me()._brit or not galstuk._wear then
|
||
return cat(
|
||
'Я захожу в зал, когда меня останавливает человек в форме с надписью <<ОХРАНА>>. В его руках помповое ружье.^^', goto('facectrl')), false;
|
||
end
|
||
facectrl:poff(1, 5);
|
||
facectrl:pon(6);
|
||
return goto('facectrl'), false;
|
||
end,
|
||
way = { 'cor4' },
|
||
};
|
||
|
||
hall41 = room {
|
||
nam = 'Зал 1',
|
||
dsc = [[Я захожу в пустой зал. Похоже -- это один из залов для проведения лекций. Множество мест уходят
|
||
под небольшим уклоном к потолку.]],
|
||
pic = 'gfx/hall1.png',
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Глядя в ночную темноту, я с тоской вспоминаю Барсика...';
|
||
end
|
||
if w == 2 then
|
||
return 'Примерно такие были у нас в институте, когда я... Ладно...';
|
||
end
|
||
if w == 3 then
|
||
return 'Все, что я мог бы вспомнить, я благополучно забыл.';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1, 'окна', 'Три больших {окна} выходят на западную сторону.'),
|
||
vobj(2, 'стол', 'Длинный {стол} стоит перед доской.'),
|
||
vobj(3, 'доска', 'На {доске} видны следы формул прошлой лекции.'),
|
||
'portrait',
|
||
},
|
||
way = {
|
||
'cor4',
|
||
},
|
||
};
|
||
|
||
cor4 = room {
|
||
nam = 'коридор 4-го этажа',
|
||
pic = 'gfx/cor4.png',
|
||
dsc = 'Я нахожусь в коридоре. Потолки на этом этаже очень высокие. В конце коридора находятся туалеты. Под ногами -- ковровая дорожка зеленого цвета.',
|
||
act = function(s, w)
|
||
if not tonumber(w) then
|
||
return;
|
||
end
|
||
if w == 11 then
|
||
return 'Некоторые из них заходят в зал 2.';
|
||
end
|
||
if w == 1 then
|
||
return 'Я тоскливо гляжу в ночную тьму... Я понимаю -- что очень устал... Но я должен идти...';
|
||
end
|
||
if w == 12 then
|
||
return 'Эта дверь, как и многие здесь, снабжена считывателем смарт-карт. На нем горит красная лампочка.';
|
||
end
|
||
if tonumber(w) >=5 and tonumber(w) <=9 then
|
||
room4x._num = w - 4;
|
||
return goto('room4x');
|
||
end
|
||
if w == 10 then
|
||
ways():add('room46');
|
||
return goto('room46');
|
||
end
|
||
if w == 2 then
|
||
ways():add('hall41');
|
||
return goto('hall41');
|
||
end
|
||
if w == 3 then
|
||
ways():add('hall42');
|
||
return goto('hall42');
|
||
end
|
||
end,
|
||
used = function(s, w, ww)
|
||
if w == 12 and ww == 'card' then
|
||
return 'Я подношу карточку к считывателю... Биип... Доступ не разрешен...';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1, 'окно', '{Окно} выходит на юг.'),
|
||
vobj(2, 'зал 1','На западной стороне я вижу два широких дверных проема: {зал 1},'),
|
||
vobj(3, 'зал 2', '{зал 2}.'),
|
||
vobj(5, 'аудитория 1', 'На восточной стороне расположены двери поменьше. Надписи на дверях: {аудитория 1},'),
|
||
vobj(6, 'аудитория 2', '{аудитория 2},'),
|
||
vobj(7, 'аудитория 3', '{аудитория 3},'),
|
||
vobj(8, 'аудитория 4', '{аудитория 4},'),
|
||
vobj(9, 'аудитория 5', '{аудитория 5},'),
|
||
vobj(10, 'аудитория 6', '{аудитория 6}.'),
|
||
vobj(11, 'люди', 'Время от времени в коридоре появляются {люди}.'),
|
||
vobj(12, 'входная дверь', 'Входная {дверь} находится на северном конце коридора.'),
|
||
'portrait',
|
||
},
|
||
way = {
|
||
'toilet',
|
||
'toiletw',
|
||
}
|
||
};
|
||
floor4 = room {
|
||
nam = 'площадка 4-го этажа',
|
||
pic = 'gfx/floor4.png',
|
||
dsc = 'На четвертом этаже высокие потолки.',
|
||
act = function(s, w)
|
||
if w == 1 then
|
||
return 'Тьма... Нет ни одного огонька... Я даже не вижу звезд, тусклый, но тягостный свет ламп дневного освещения мешает их увидеть...';
|
||
end
|
||
if w == 2 then
|
||
return 'Я ненавижу лифты...';
|
||
end
|
||
if w == 3 or w == 4 then
|
||
return 'Обычная дверь для этого здания. Электронный замок. Без карточки я не пройду.';
|
||
end
|
||
end,
|
||
used = function(s, w, ww)
|
||
if ww == 'card' then
|
||
if w == 3 or w == 4 then
|
||
return [[Я подношу карточку к считывателю. Бииип... В доступе отказано...]];
|
||
end
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1, 'окно','{Широкое} окно смотрит на запад.'),
|
||
vobj(2, 'лифты', 'Площадка с четырьмя {лифтами} тускло освещена лампами.'),
|
||
vobj(3, 'южная дверь', 'Две двери ведут в северный и южный коридоры. Надпись на южной {двери}: <<уровень:4 категория:теоретическая физика>>'),
|
||
vobj(4, 'северная дверь', 'На северной {двери}: <<уровень:4 категория: биология>>'),
|
||
},
|
||
way = { 'lift' },
|
||
};
|
||
|
||
floor5 = room {
|
||
nam = 'площадка 5-го этажа',
|
||
pic = 'gfx/floor5.png',
|
||
dsc = [[Потолки на пятом этаже очень высокие.]],
|
||
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 or w == 5 then
|
||
return 'Изучить двери мне мешает охранник... А мой пропуск здесь не подойдет...';
|
||
end
|
||
if w == 6 then
|
||
return 'Пока он не обращает на меня внимания, но все-равно не стоит нарываться...';
|
||
end
|
||
end,
|
||
used = function(s, w)
|
||
if not tonumber(w) then
|
||
return
|
||
end
|
||
if w == 6 then
|
||
return 'Не надо его раздражать...';
|
||
end
|
||
if w >=1 and w <=5 then
|
||
return 'Я не буду делать это при охраннике.';
|
||
end
|
||
end,
|
||
obj = {
|
||
vobj(1, 'ковер', 'Лифтовую площадку покрывает красный {ковер}.'),
|
||
vobj(2, 'люстра', 'Хрустальная {люстра} висит на высоком потолке.'),
|
||
vobj(3, 'окно', 'Широкое {окно} выходит на запад.'),
|
||
vobj(4, 'информация', 'Я вижу две двери, ведущие в южный и северный коридоры. На южной {двери} написано: <<уровень 5, категория: информация>>.'),
|
||
vobj(5, 'красная дверь', 'На северной {двери} нет надписей. Это массивная дверь, обитая красной кожей.'),
|
||
|
||
vobj(6, 'охранник', 'Между проходами в коридоры установлен стол, за которым сидит {охранник},');
|
||
},
|
||
way = { 'lift' },
|
||
};
|
||
|