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