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

1525 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.

------------- 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' },
};