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

1525 lines
68 KiB
Lua
Raw Normal View History

2009-02-21 12:52:44 +02:00
------------- 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 = {
'Холодновато, но стильно!',
'Очень красиво смотрится на фоне снега!',
'Длиннополое пальто -- это ретро!',
2009-08-26 08:25:53 +03:00
'Я -- терминатор!',
'Я -- пацифист!',
2009-02-21 12:52:44 +02:00
'Пиджачок сидит на мне как влитой!',
'Рокн рол мертв, а я еше нет!',
'Когда-то я занимался альпинизмом!',
},
nam = function(s)
return s.xnam[s._num];
end,
inv = function(s)
if s._num == 7 and not have('card') then
inv():add('card');
2009-08-26 08:25:53 +03:00
return 'Немного покопавшись в карманах косухи, я нашел карточку.';
2009-02-21 12:52:44 +02:00
end
return s.xinv[s._num];
end,
};
garderob = obj {
nam = 'гардероб',
dsc = 'На правой стороне коридора висят {вешалки} с одеждой.',
act = function(s, w)
if have('mywear') or have('alienwear') then
2009-08-26 08:25:53 +03:00
return 'Здесь много людей, я не думаю, что я смогу сделать это незаметно.';
2009-02-21 12:52:44 +02:00
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 = 'По стенам развешены большие {портреты} в деревянных рамах.',
2009-08-26 08:25:53 +03:00
act = 'Гм... На портретах одно и тоже лицо! Улыбающееся холодной улыбкой лицо человека, лет сорока, с пустым, ничего не выражающим взглядом.',
2009-02-21 12:52:44 +02:00
};
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)]]),
2009-08-26 08:25:53 +03:00
[5] = _phr('Эээ... Отдел изучения квазипространства!', '-- Ого! Прикольно!', [[pon(6);poff(3,4)]]),
2009-02-21 12:52:44 +02:00
[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)]]),
2009-08-26 08:25:53 +03:00
[11] = _phr('Сережка.', '-- Дай пятерню, братан!', [[poff(10,12); pon(13)]]),
[12] = _phr('Гоша...', '-- Ну, будем знакомы, Гошка!', [[poff(10,11); pon(13)]]),
2009-02-21 12:52:44 +02:00
[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, "подъезд", "У восточного угла находится небольшой {подъезд}."),
2009-08-26 08:25:53 +03:00
vobj(2, "люди", "Время от времени дверь подъезда хлопает, впуская и выпуская {людей}.")},
2009-02-21 12:52:44 +02:00
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
2009-08-26 08:25:53 +03:00
return 'Да -- водосточная труба... Довольно крепкая. Но вряд ли я смогу взобраться по ней наверх.';
2009-02-21 12:52:44 +02:00
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
2009-08-26 08:25:53 +03:00
return 'Тот самый фургон, с которого все началось...';
2009-02-21 12:52:44 +02:00
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
2009-08-26 08:25:53 +03:00
return 'Мне кажется, там внутри возникнет множество вопросов по-поводу моего дробовика... Я должен его как-то спрятать.', false
2009-02-21 12:52:44 +02:00
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;
2009-08-26 08:25:53 +03:00
return 'Напрягая свои силы, я сдвигаю один из столов в центр комнаты.';
2009-02-21 12:52:44 +02:00
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
2009-08-26 08:25:53 +03:00
return [[Открыв дверь, я заглядываю внутрь комнаты. Ухх... Пусто! Можно осмотреться...]];
2009-02-21 12:52:44 +02:00
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 [[Я перевожу выключатель в позицию <<выключено>> и иду вдоль стен, когда
одна из дверей за мной вдруг открывается и старческий голос звучит на весь коридор -- Безобразие!!! Включите обратно!!! --
2009-08-26 08:25:53 +03:00
мне приходится вернуться к выключателю и перевести его в позицию <<включено>>.]];
2009-02-21 12:52:44 +02:00
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
2009-08-26 08:25:53 +03:00
return 'Я подхожу к одной из дверей и заглядываю в окошко-иллюминатор... Люди в белых костюмах, словно пчелы, снуют у причудливых аппаратов. -- Наверное, это лаборатории -- догадываюсь я.';
2009-02-21 12:52:44 +02:00
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
2009-08-26 08:25:53 +03:00
return 'Окно выходит на южную сторону... Темно -- ничего не видно, кроме снежинок, ударяющихся о стекло...';
2009-02-21 12:52:44 +02:00
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
2009-08-26 08:25:53 +03:00
return 'Я пью хлорированную воду жадными глотками... Да -- это не та вода из ручья, которую я пью в лесу...';
2009-02-21 12:52:44 +02:00
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
2009-08-26 08:25:53 +03:00
return 'Металл обитый кожей. Дверь снабжена считывателем электронных карт. Надпись на двери: <<Уровень:3 Категория: Прикладная физика>>';
2009-02-21 12:52:44 +02:00
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
2009-08-26 08:25:53 +03:00
return 'Глядя в ночную темноту, я с тоской вспоминаю Барсика...';
2009-02-21 12:52:44 +02:00
end
if w == 2 then
return 'Примерно такие были у нас в институте, когда я... Ладно...';
end
if w == 3 then
2009-08-26 08:25:53 +03:00
return 'Все, что я мог бы вспомнить, я благополучно забыл.';
2009-02-21 12:52:44 +02:00
end
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
2009-08-26 08:25:53 +03:00
return 'Эта дверь, как и многие здесь, снабжена считывателем смарт-карт. На нем горит красная лампочка.';
2009-02-21 12:52:44 +02:00
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, 'красная дверь', 'На северной {двери} нет надписей. Это массивная дверь, обитая красной кожей.'),
2009-08-26 08:25:53 +03:00
vobj(6, 'охранник', 'Между проходами в коридоры установлен стол, за которым сидит {охранник},');
2009-02-21 12:52:44 +02:00
},
way = { 'lift' },
};