-- Доступное пространство имён для объектов - все имена объектов должны начинаться с "room15_" или "bedroom_" -- Все описания можно менять -- Задача: Игрок должен найти в локации предмет statuetka -- Спальня находится на втором этаже room { nam = "room15_bedroom"; book_read = false; title = "Спальня"; dsc = function(s) if pl:where()^'room15_void' then return "Тебя окружает пустота. Через окно ты видишь просторную спальню. "; else return "Просторная комната с единственным окном. Выход из комнаты находится на западе. "; end; end; w_to = 'room14_secondfloor'; out_to = 'room14_secondfloor'; awake = false; complete = false; lampon = false; ["before_Push,Pull,Turn,SwitchOn,SwitchOff,Take,Insert,Remove,Eat,Taste,Drink,Rub,Touch,Kiss,Open,Close"] = function(s, w) if pl:where()^'room15_bedroom' or w == nil or w:where() == nil or pl:where()^'room15_bed' and w^'room15_lamp' or pl:where()^'room15_void' and w:where()^'room15_void' then return false; else pr 'Отсюда это сделать не получится. '; end; end; before_Drop = function(s, w) if pl:where()^'room15_void' then pr 'Тебе это не кажется хорошей идеей. '; return; end; return false; end; ["after_Push,Pull,Turn"] = 'Это так не работает. '; before_Walk = function(s, w) if pl:where()^'room15_bedroom' then if (not w^'@w_to' and not w^'@out_to') or s.awake then return false; else pr 'За порогом ты не видишь ничего, кроме пустоты. Ты не решаешься сделать шаг. Уж не {$fmt em|спишь} ли ты?'; end; else pr 'Отсюда не получится. '; end; end; after_Listen = function(s, w) if w ~= nil then return false; end; if _'room15_tv':has('on') then pr(_'room15_tv':sound()); else pr "Негромкое тикание часов отчетливо слышно в тишине. "; if not s.awake then pr "Из-под кровати доносятся непонятные звуки. "; end; end; end; after_Smell = function(s, w) if w ~= nil then return false; end; if w == nil then return "Пахнет свежевыглаженным постельным бельем. "; else return false; end; end; before_Open = function(s, w) if w ~= nil then return false; end; if not pl:where()^'room15_bedroom' and not have(w) then return 'Придется встать с кровати. '; else return false; end; end; before_Exam = function(s, o) if o^'@w_to' then pr 'За порогом ты не видишь ничего, кроме пустоты. Уж не {$fmt em|спишь} ли ты?' else return false; end; end; after_Wait = function(s) if s.awake then return "Проходит немного времени. Не происходит ничего не обычного. "; else return "Проходит немного времени. Кажется, рисунок на обоях слегка изменился. "; end; end; after_Dig = function(s, w) if w == nil then return "Тебе слишком дорог твой маникюр, чтобы делать это руками. "; end; return false; end; after_Jump = "Пол жалобно поскрипывает после твоего приземления. "; after_Think = function(s) if s.awake and not s.complete then pr "Думать вредно -- голова болит. Лучше {$fmt em|поспать}. "; else pr "Думать вредно -- голова болит. Лучше поесть. "; end; end; before_Sing = function(s) if not s.awake and _'room15_tv':has('on') then pr 'Твой голос сливается с голосами из телевизора и оттого ужасающее пение становится еще более жутким. '; end; return false; end; after_Sleep = function(s) if pl:where()^'room15_bed' then _'room15_spider':disable(); if s.complete then pr 'Прошлый сон все еще слишком свеж в твоей памяти, чтобы погружаться в новый. '; elseif _'room15_curtain':has('open') then pr 'Свет из окна не дает тебе заснуть. '; elseif _'room15_tv':has('luminous') then pr 'Телевизор не дает тебе заснуть. '; elseif s.awake then s.awake = false; s.lampon = _'room15_lamp':has('light'); remove('room15_sky', 'room15_bedroom'); put('room15_void', 'room15_bedroom'); pr 'Ты быстро погружаешься в сон. Через какое-то время ты просыпаешься от ощущения, что в комнате что-то не так. '; pl:need_scene(true); else pr('Ты долго ворочаешься, но никак не можешь уснуть. тебе кажется, что кто-то есть под кроватью! '); end; else pr "Лучше делать это в кровати. "; end; end; after_Wake = function(s) if s.awake then return false; end; s.awake = true; walk('room15_bed'); -- Восстанавливаем состояние комнаты как было -- вне сна все равно трогать ничего нельзя. _'room15_window'.rope = false; _'room15_curtain':attr('~open'); _'room15_window':attr('~open'); local cabinet = lookup('#room15_in_cabinet', 'room15_cabinet'); cabinet:attr('~open'); if s.lampon then _'room15_lamp':attr('on,light'); else _'room15_lamp':attr('~on,~light'); end; _'room15_cabinet':attr('~luminous'); _'#room15_at_cabinet':attr('~luminous'); _'room15_tv':attr('~on,~luminous'); _'room15_rope':attr('~static'); _'room15_void':disable(); _'room15_spider':disable(); remove('room15_book', where('room15_book')); remove('room15_linen', where('room15_linen')); remove('room15_void', 'room15_bedroom'); remove('room15_shreds', where('room15_shreds')); remove('room15_rope', where('room15_rope')); remove('room15_book', where('room15_book')); if not s.complete then remove('statuetka', where('statuetka')); put('statuetka', 'room15_void'); pr 'Осознав, что спишь, ты довольно быстро просыпаешься. Однако, ты чувствуешь, что готова провалиться обратно в {$fmt em|сон}. '; end; put('room15_linen', cabinet); put('room15_book', cabinet); put('room15_sky', 'room15_bedroom'); pl:need_scene(true); end; after_Yes = 'Борода. '; after_No = 'Бородатый дед. '; obj = { 'room15_walls', 'room15_curtain', 'room15_window', 'room15_bed', 'room15_spider','room15_table', 'room15_lamp', 'room15_cabinet', 'room15_void' }; }: attr('~light') obj { -"небо на обоях,небо|стены/жр|обои|панели|облака"; nam = 'room15_walls'; dsc = 'Стены обиты панелями снизу, а сверху оклеены обоями с облачками. '; before_Exam = function(s) if _'room15_bedroom'.awake then return 'Нижняя часть стен обита деревянными панелями, верхняя же оклеена обоями, на которых изображено голубое небо с облаками. '; else return 'Нижняя часть стен обита деревянными панелями, верхняя же оклеена обоями, на которых изображено голубое небо с облаками. Тебе кажется, что облака медленно движутся вдоль стен. '; end; end; before_Smell = 'Стены ничем не пахнут. '; ["before_Taste,Eat"] = 'Ты предпочла бы съесть что-нибудь... Более съедобное. '; before_Touch = 'Ты не испытываешь никаких необычных ощущений. '; ["before_Push,Pull,Turn,Rub,Tear,Tie,Cut,Attack,Kiss"] = 'Вот придешь к себе домой -- там делай со своими стенами все, что захочешь. '; ["before_Talk,Tell,Answer"] = 'Стены молчат в ответ. '; ["before_Ask,AskFor,AskTo"] = 'Бесполезно. Стены не отвечают на твои слова. '; before_Blow = function(s) if _'room15_bedroom'.awake then pr 'Ты дуешь на стены. Ничего не происходит. '; else pr 'Ты дуешь на стены и облака разбегаются в стороны от потока воздуха. '; end; end; before_Take = 'Халк крушить! Халк ломать! Халк надорвался... '; }: attr('static'); obj { -"занавески|занавеска|шторы"; nam = 'room15_curtain'; description = function(s) if s:has('open') then pr 'Тяжелые занавески из плотной ткани темно-серого цвета. Сейчас они раздвинуты. '; else pr 'Тяжелые занавески из плотной ткани темно-серого цвета. Сейчас они закрыты. '; end; end; after_Open = function(s) if _'room15_bedroom'.awake then s:attr('light'); enable('room15_sky'); pr 'Ты открываешь занавески. Яркий свет ослепляет тебя после полумрака комнаты. '; else enable('room15_void'); pr 'Ты открываешь занавески. За окном ты видишь непроглядную пустоту. '; mp:content(_'room15_void'); end; end; before_Close = function(s) if s:has('~open') then return false; end; if _'room15_window':has('open') then pr 'Створки окна мешают закрыть занавески. '; else s:attr('~light,~open'); disable('room15_void'); disable('room15_sky'); pr 'Ты закрываешь занавески. '; end; end; before_Smell = 'Занавески пахнут пылью. '; before_Taste = 'Ткань безвкусная. '; before_Eat = function(s) if _'room15_bedroom'.awake then pr 'Тетушке не понравится, если ты съешь занавески. '; else pr 'Жуется, конечно, приятно, но съесть целую занавеску? Ну уж нет. '; end; end; before_Touch = 'Плотная ткань немного жесткая, но довольно приятная на ощупь. '; ["before_Push,Pull,Turn,Rub,Tear,Tie,Cut,Attack,Kiss"] = 'Остановись! Занавески ни в чем не виноваты! '; ["before_Talk,Tell,Answer"] = 'Занавески ничем не выдают заинтересованности в разговоре с тобой. '; ["before_Ask,AskFor,AskTo"] = 'Увы, занавески отказываются исполнять твою просьбу. Объяснить свой отказ они тоже не изволят. '; before_Blow = 'Ты дуешь на занавески, но тяжелая ткань почти не шевелится. '; before_Take = 'Занавески тебе не понадобятся. '; }: attr('concealed,openable,luminous,static'); obj { -"окно"; nam = 'room15_window'; rope = false; dsc = function(s) if _'room15_curtain':has('open') then if _'room15_bedroom'.awake then pr 'За окном ты видишь голубое небо. '; else if not pl:where()^'room15_void' then pr 'За окном ты видишь непроглядную пустоту. '; mp:content(_'room15_void'); end; end; else pr 'Окно закрыто плотными занавесками. '; end; end; description = function(s) if _'room15_curtain':has('open') then if _'room15_bedroom'.awake then pr 'За окном ты видишь голубое небо. '; else pr 'За окном ничего нет. Совсем ничего. Одна пустота. '; if s:has('open') then pr 'Окно открыто. ' end; mp:content(_'room15_void'); if s.rope then pr 'К подоконнику прикреплена веревка из обрывков простыней. '; end; end; else pr 'Окно закрыто занавесками. '; end; end; before_Open = function(s) if not _'room15_curtain':has('open') then pr '{$fmt em|(сначала открыть занавески)}^'; mp:subaction('Open', _'room15_curtain'); end; if not s:has('open') then pr 'Ты открываешь окно. '; if _'room15_bedroom'.awake then pr 'В комнату врывается порыв свежего прохладного воздуха. '; end; s:attr('open'); else return false; end; end; before_Close = function(s) if s.rope then pr 'Веревка мешает закрыть окно. '; return end; return false; end; before_Smell = 'Окно ничем не пахнет. '; before_Taste = 'Дерево ты еще могла бы погрызть, но краска вряд ли скажется положительно на твоем желудке. А уж стекло -- и подавно. '; before_Eat = 'Дерево ты еще могла бы погрызть, но краска вряд ли скажется положительно на твоем желудке. А уж стекло -- и подавно. '; before_Touch = 'Окно гладкое на ощупь. '; ["before_Push,Pull,Turn,Rub,Tear,Tie,Cut,Attack,Kiss"] = 'Ты решаешь не портить окно в доме тётушки. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = 'Окно игнорирует тебя. '; before_Blow = 'Окно запотевает от твоего дыхания. '; before_Take = 'Халк крушить! Халк ломать! Халк надорвался... '; before_Enter = function(s) if _'room15_curtain':has('~open') then pr 'Сначала стоит открыть занавески. '; return; end; if not _'room15_bedroom'.awake then if pl:where()^'room15_void' then mp:xaction('Exit', _'room15_void'); else mp:xaction('Enter', _'room15_void'); end; else pr 'Выпрыгнуть из окна? Нет уж.'; end; end; before_Receive = function(s) if _'room15_curtain':has('~open') then pr 'Сначала стоит открыть занавески. '; return; end; mp:xaction('Receive', _'room15_void'); end; }: attr('openable,static,container,luminous'); obj { -"кровать,постель"; nam = 'room15_bed'; title = 'в кровати'; dsc = 'У стены стоит большая кровать. '; description = function(s) pr 'Большая кровать, застеленная покрывалом. '; mp:content(s); end; inside_dsc = 'Ты лежишь на большой кровати. '; after_Enter = 'Ты ложишься на кровать. '; before_LookUnder = function(s) if mp:thedark() then pr 'Ничего не видно. '; return; elseif pl:where()^'room15_bedroom' then enable('room15_spider'); if _'room15_bedroom'.awake then pr 'Под кроватью живет паучок. '; else pr 'Из-под кровати на тебя своими восемью глазищами смотрит огромный паук. '; end; return; elseif pl:where()^'room15_bed' then pr 'Сначала придется слезть с кровати. '; return; elseif pl:where()^'room15_void' then pr 'Отсюда ничего не видно. '; return; end; return false; end; before_Smell = 'Пахнет тканью, деревом и пылью. '; before_Taste = 'Ты аккуратно кусаешь угол кровати. На вкус как дерево. '; before_Eat = 'Долго рассматривая кровать, ты так и не решила, с чего начать ее есть. '; ["before_Touch,Rub"] = function(s) if _'room15_bedroom'.awake and not _'room15_bedroom'.complete then pr 'Постель мягкая и приятная на ощупь. Так и тянет {$fmt em|спать}. '; else pr 'Постель мягкая и приятная на ощупь. Так и тянет спать. '; end; end; ["before_Tear,Tie,Cut,Attack"] = 'Почему тебе так нравится все ломать? '; before_Kiss = 'Кровать не реагирует на твое проявление чувств. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = 'Кровать не отвечает на твои потуги заговорить. '; before_Blow = 'Ты подула на кровать, но ничего не изменилось. '; before_Take = 'Кровать слишком тяжелая. '; obj = { 'room15_bedspread' }; }: attr('enterable,supporter,static,luminous'); obj { -"покрывало"; nam = 'room15_bedspread'; description = 'Мягкое бархатное покрывало лежит на кровати. '; before_Take = 'Что ты задумала?'; before_Smell = 'Пахнет тканью и пылью. '; before_Tear = 'Тётя Агата будет очень недовольна, если ты это сделаешь. '; before_Tie = 'Ты не понимаешь, для чего тебе это. '; ["before_Taste,Eat"] = 'Ты пытаешься отгрызть уголок покрывала, но у тебя ничего не получается. Тебе остается лишь надеяться, что тетушка не заметит погрызенное покрывало. '; ["before_Rub,Touch"] = 'Покрывало гладкое и мягкое. '; before_Cut = 'Ты не думаешь, что это хорошая идея. '; before_Attack = 'Ты со всей силы бьешь покрывало. Оно мягкое, все стерпит. '; before_Blow = 'Ты дуешь на ткань. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Покрывалу очень интересно, правда. Продолжай. "; before_Kiss = "Покрывалу, должно быть, очень приятно. Но оно никак не реагирует. "; }:attr('concealed'); obj { -"паук,паучок"; nam = 'room15_spider'; description = function(s) if _'room15_bedroom'.awake then pr 'Маленький безобидный паучок мирно плетёт свою маленькую безобидную паутинку. '; else pr 'Огромный голодный паук! Как только он уместился там?! '; end; end; before_Take = function(s) if _'room15_bedroom'.awake then pr 'Паучок никуда с тобой не пойдет. '; else pr 'Паук хищно шипит, открыв пасть и желание притрагиваться к нему резко пропадает. '; end; end; ["before_Smell,Taste,Eat"] = 'Тебе почему-то очень не хочется это делать. '; ["before_Push,Pull,Turn,Rub,Touch,Tear,Tie,Cut"] = function(s) if _'room15_bedroom'.awake then return 'Ты опасаешься раздавить паучка и решаешь ничего не предпринимать. '; else return 'Паук щелкает пастью, и ты поспешно отдергиваешь руки. '; end; end; ["before_Talk,Tell,Answer"] = function(s) if _'room15_bedroom'.awake then pr 'Паучок молча слушает тебя. '; else pr 'Паук молча выслушивает тебя, а потом делает резкий выпад в твою сторону. Ты еле успеваешь отпрыгнуть, а паук возвращается на свое место. '; end; end; ["before_Ask,AskFor,AskTo"] = function(s) if _'room15_bedroom'.awake then pr 'Паучок не хочет тебе помогать. '; else pr 'Паук молча выслушивает тебя, а потом делает резкий выпад в твою сторону. Ты еле успеваешь отпрыгнуть, а паук возвращается на свое место. Ты понимаешь, что он не станет делать то, что тебе нужно. '; end; end; before_Attack = function(s) if _'room15_bedroom'.awake then return 'Разве можно так поступать с маленьким безобидным паучком?! '; else return 'Не стоит лезть на рожон. '; end; end; before_Blow = function(s) if _'room15_bedroom'.awake then return 'Ты опасаешься навредить паучку и решаешь этого не делать. '; else return 'Ты опасаешься разозлить паука и решаешь этого не делать. '; end; end; life_Show = function(s, w) print('FUG'); if _'room15_bedroom'.awake then return 'Паучок старательно делает вид, что ему интересно. '; else return 'Паук недовольно шипит на ' .. w:noun('вн') .. '.'; end; end; before_Kiss = 'Чего?!'; before_Listen = function(s) if _'room15_bedroom'.awake then return false; else return 'Паук шипит, щелкает пастью и скрежещет своими лапами по полу. '; end; end; }: attr('static,animate'): disable(); obj { -"стол,столик|столешница"; nam = 'room15_table'; dsc = function(s) pr 'Рядом с ней расположен маленький столик. '; mp:content(s); end; description = function(s) pr 'Небольшой круглый столик с дубовой столешницей. '; mp:content(s); end; obj = { 'room15_clock'; 'room15_vase'; }; before_Take = 'Ты слишком опасаешься уронить предметы, стоящие на столе, чтобы сделать это. '; before_Smell = 'Стол слабо пахнет деревом. '; ["before_Taste,Eat"] = 'Ты не в настроении грызть дерево. '; before_Rub = 'Ты зачем-то протираешь ладонью стол. Пыли на поверхности почти нет. '; before_Touch = "Стол гладкий и приятный на ощупь"; ["before_Tear,Tie,Cut"] = "Как ты себе это представляешь?"; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Ты в своем уме, с мебелью разговаривать?"; before_Attack = "Тётушка расстроится, если я сломаю ее столик. "; before_Blow = "Ты дуешь на стол. Ничего не происходит. "; before_Kiss = 'Стол никак не реагирует, а ты чего ждала?'; }:attr('supporter,static'); obj { -"часы|стрелка/жр,но|стрелки/жр,но,мн"; dsc = 'На краешке стола стоят часы. '; nam = 'room15_clock'; description = 'Старинные бронзовые часы с позолотой показывают примерно полчетвертого. Секундная стрелка размеренно движется по кругу. '; ["before_Take,Push,Pull,Turn,Rub,Touch,Attack,Kiss"] = 'Ты не решаешься трогать столь редкую и дорогую вещь. '; before_Smell = 'Часы пахнут стариной. '; ["before_Taste,Eat"] = 'Это не пойдет на пользу твоим зубам. '; ["before_Tear,Tie,Cut"] = "Нет. Просто нет. "; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Часы выслушивают тебя и продолжают медленно отсчитывать секунды. "; before_Blow = "Ты дуешь на стол. Ничего не происходит. "; before_Listen = 'Тикание часов отчетливо слышно в тишине. '; }: attr('static'); obj { -"ваза|цветы,тюльпаны|цветок,тюльпан"; nam = 'room15_vase'; dsc = 'В центре стола стоит ваза с цветами. '; description = 'Хрустальная ваза. В вазе стоят несколько благоухающих тюльпанов. '; before_Take = 'Цветам и здесь хорошо. Не надо их трогать. '; before_Smell = 'Ты вдыхаешь восхитительный аромат тюльпанов. Тётя Агата очень любит эти цветы. '; ["before_Taste,Eat"] = 'Ты вспоминаешь как однажды в детстве съела несколько горьких, неприятных на вкус лепестков и решаешь не повторять этот опыт. До сих пор удивляешься, как что-то настолько невкусное может так приятно пахнуть. '; ["before_Push,Pull,Turn,Rub,Touch,Attack,Tear,Tie,Cut,Blow"] = 'Ты даже боишься себе представить, что будет, если ты разобьешь вазу. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Цветы остаются безучастными к твоим мольбам. "; before_Kiss = "Может, лучше не надо?"; }: attr('static'); obj { -"настенная лампа,лампа|светильник|ночник"; nam = 'room15_lamp'; dsc = function(s) if s:has('on') then pr 'На стене над кроватью висит зажженная лампа. '; else pr 'На стене над кроватью висит лампа. '; end; end; description = 'Настенный светильник со светло-бежевым абажуром. '; before_Take = 'Лампе и здесь хорошо. '; before_Smell = 'Лампа ничем не пахнет. Странно. '; ["before_Taste,Eat"] = 'Ты долго раздумываешь над вкусовыми качествами пластиковых абажуров и стеклянных ламп, и в итоге решаешь не пробовать ни то ни другое. '; before_Touch = function(s) if s:has('light') then pr 'Лампа слишком горячая!'; else pr 'Светильник теплый на ощупь. ' end; end; ["before_Push,Pull,Turn,Rub,Attack,Tear,Tie,Cut"] = 'Да сколько можно все вокруг ломать? '; before_Blow = 'Ты дуешь на светильник. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Ваза остается безучастной к твоим мольбам. "; before_Kiss = "Может, лучше не надо?"; before_SwitchOn = function(s) s:attr('light'); return false; end; before_SwitchOff = function(s) s:attr('~light'); return false; end; }: attr('static,on,light,switchable,luminous'); obj { -"тумбочка,тумба|ящик|ящики"; dsc = function(s) pr 'У стены напротив кровати стоит массивная тумбочка. '; mp:content(s); end; nam = 'room15_cabinet'; before_Receive = function(s, w) if mp.xevent == 'Insert' then if _'#room15_in_cabinet':hasnt'open' then p "Тумбочка закрыта." return end move(w, '#room15_in_cabinet') p ("Ты кладешь ", w:noun'вн', " в тумбочку.") elseif mp.xevent == 'PutOn' then move(w, '#room15_at_cabinet') p ("Ты кладешь ", w:noun'вн', " на тумбочку.") else return false end end; before_Open = function(s) if _'room15_bedroom'.awake then pr 'Там нет ничего интересного. '; else return mp:xaction('Open', _'#room15_in_cabinet'); end; end; before_Close = function(s) return mp:xaction('Close', _'#room15_in_cabinet'); end; description = function(s) pr 'Внушительных размеров тумбочка с ящиками. '; mp:content(s); end; obj = { obj { -"тумбочка"; nam = '#room15_in_cabinet'; dsc = function(s) mp:content(s) end; obj = { 'room15_linen'; 'room15_book'; }; }: attr('container,openable,static'); obj { -"тумбочка"; nam = '#room15_at_cabinet'; dsc = function(s) mp:content(s) end; obj = { 'room15_tv'; }; }: attr('supporter,static'); }; before_Take = 'Тумбочка слишком тяжелая. '; before_Smell = 'Тумбочка пахнет мебелью. '; ["before_Taste,Eat"] = 'Обойдя тумбочку со всех сторон, ты так и не понимаешь, с какой стороны ее можно удобно укусить. '; ["before_Push,Pull,Turn"] = 'Тумбочка слишком тяжелая. '; ["before_Rub,Touch,Attack,Tear,Tie,Cut"] = 'Тебя бабушка не учила не ломать вещи когда ты в гостях? '; before_Blow = 'Ты сдуваешь пыль с тумбочки. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Тумбочке не интересно тебя слушать. "; before_Kiss = "Тумбочке приятно. Нет, правда. "; }: attr('container,transparent,open,static'); obj { -"простыня,простынь"; nam = 'room15_linen'; description = 'Чистая простыня. Она кажется достаточно прочной, чтобы выдержать твой вес. '; before_Take = function(s) if _'room15_book':disabled() then _'room15_book':enable(); pr 'Под простынёй лежит книга!'; end; return false; end; tearApart = function(s) remove('room15_linen', where('room15_linen')); mp.score=mp.score+1 take('room15_shreds'); pr 'Ты разрываешь простыню, теперь у тебя есть обрывки ткани. '; if _'room15_book':disabled() then _'room15_book':enable(); pr 'Под простынёй лежит книга!'; end; end; before_Smell = 'Пахнет чистой постелью. '; before_Tear = function(s) if _'room15_bedroom'.awake then pr 'Тётя Агата будет очень недовольна, если ты это сделаешь. '; else s:tearApart(); end; end; before_Tie = function(s, w) if _'room15_bedroom'.awake then pr 'Ты не понимаешь, для чего тебе это. '; elseif w == nil or w^'room15_window' then pr 'Так ничего не получится. Она слишком короткая и чересчур толстая. '; elseif w^'statuetka' then pr 'Статуэтка слишком далеко. ' else pr 'Ты не понимаешь, для чего тебе это. '; end; end; ["before_Taste,Eat"] = 'Ты отгрызаешь уголок простыни, надеясь, что тётушка не заметит этого. Ткань приятно жуется и почти безвкусная. '; ["before_Rub,Touch"] = 'Простыня шершавая, но очень приятная на ощупь. '; before_Cut = function(s, w) if _'room15_bedroom'.awake then pr 'Тётя Агата будет очень недовольна, если ты это сделаешь. '; else if w == nil then return 'Твои руки недостаточно острые. '; elseif w^'dagger' then s:tearApart(); else return 'Простыня не режется. Возможно стоит резать ее чем-то другим. '; end; end; end; before_Attack = 'Ты со всей силы бьешь простыню. Она мягкая, все стерпит. '; before_Blow = 'Ты дуешь на ткань. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Простыне очень интересно, правда. Продолжай. "; before_Kiss = "Простыня никак не реагируют. "; }; obj { -"обрывки простыни,обрывки ткани,обрывки|простыня,простынь|ткань"; nam = 'room15_shreds'; description = 'Прочные и длинные полосы из простыней. '; before_Tie = function(s, w) if w == nil then remove('room15_shreds', where('room15_linen')); take('room15_rope'); mp.score=mp.score+1 pr 'Ты связываешь обрывки между собой. Получается достаточно прочная веревка. '; elseif w^'room15_window' then pr 'Ты сомневаешься, что их длины будет достаточно. '; else return false; end; end; before_Smell = 'Обрывки ткани все еще пахнут чистыми простынями '; ["before_Taste,Eat"] = 'Ты сгрызаешь немного ткани. Ткань легко жуется и почти безвкусная. '; ["before_Push,Pull,Turn"] = 'Это так не работает. '; ["before_Rub,Touch"] = 'Простыня шершавая, но очень приятная на ощупь. '; ["before_Attack"] = 'В этом уже нет никакого смысла. '; ["before_Tear,Cut"] = 'Ткань уже достаточно рваная. '; before_Blow = 'Ты дуешь на ткань. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Сперва изодрала в клочья, а теперь заговорить пытаешься? "; before_Kiss = "Нет, простыни тебя не простят. Даже так. "; } obj { -"веревка|простыня,простынь|обрывки простыни,обрывки ткани,обрывки|ткань"; nam = 'room15_rope'; description = 'Веревка связанная из обрывков простыней. Достаточно прочная, чтобы выдержать тебя. '; before_Tie = function(s, o) if o~=nil then if o^'room15_window' then if _'room15_window':has('open') then remove('room15_rope', me()); s:attr('static'); if _'room15_window'.rope==false then mp.score=mp.score+1; end; _'room15_window'.rope = true; put('room15_rope', 'room15_window'); pr 'Ты прикрепляешь веревку к окну. Теперь ты можешь {$fmt em|войти в пустоту}. '; else pr 'Сначала придется открыть окно. '; end; else pr 'Сюда это крепить незачем. '; end; else pr 'Это надо {$fmt em|куда-то} прикрепить. '; end; end; before_Smell = 'Обрывки ткани все еще пахнут чистыми простынями '; ["before_Taste,Eat"] = 'Ты сгрызаешь немного ткани. Ткань легко жуется и почти безвкусная. '; ["before_Push,Pull,Turn"] = 'Это так не работает. '; ["before_Rub,Touch"] = 'Простыня шершавая, но очень приятная на ощупь. '; ["before_Attack"] = 'В этом уже нет никакого смысла. '; ["before_Tear,Cut"] = 'Ткань уже достаточно рваная. '; before_Blow = 'Ты дуешь на ткань. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Сперва изодрала в клочья, а теперь заговорить пытаешься? "; before_Kiss = "Нет, простыни тебя не простят. Даже так. "; before_Take = function(s) if s:has('static') then pr 'Ты долго возишься, но так и не можешь отвязать веревку. Зато теперь ты точно уверена, что она не отвяжется сама. '; return; end; return false; end; } obj { -"узорчатая книга,книга,книжка,обложка|переплет|узоры на переплете,узоры"; nam = 'room15_book'; description = '"Все и ничто" С. Оминус. Книга очень старая, потрепанная. Переплет украшен позолоченными узорами, местами истершимися от времени -- должно быть очень ценная и редкая. Странно, что тётушка не оставила ее среди других книг, а спрятала здесь. Ты бегло пролистываешь страницы. Какая-то оккультная чушь про пустоту, окружающую наш мир. '; after_Consult = function(s, o) if not _'room15_bedroom'.awake and (o:find("пусто") or o:find("ничем") or o:find("ничт") or o:find("ничём")) then pr [[ В книге подробно описан способ открытия портала в пустоту. Все что для этого необходимо -- любой проем, закрытый прозрачным материалом. После завершения ритуала прозрачный материал можно убрать. Далее на много страниц описывается ритуал открытия портала и способы взаимодействия с пустотой. ]]; else pr 'Тебе некогда читать всякую муть. '; end; end; before_Smell = 'Пахнет старой книгой. '; ["before_Taste,Eat"] = 'Вряд ли это все еще вкусно. '; ["before_Rub"] = 'Хм, узоры не стираются. '; ["before_Touch"] = 'Ты проводишь пальцем по гладкому переплету. '; ["before_Attack,Tear,Tie,Cut"] = 'Вандализм -- это нормально. Но только в своем собственном жилище. '; before_Blow = 'Ты сдуваешь пыль со страниц. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = "Ты побаиваешься изливать душу старой зловещей книге. "; before_Kiss = "Вот эту книгу?! Ты серьезно? "; }:disable(); obj { -"телевизор,телек,телик,экран|тв/мр"; nam = 'room15_tv'; dsc = function(s) if s:has('on') then pr 'На тумбочке стоит включенный телевизор. '; else pr 'На тумбочке стоит телевизор. '; end; end; description = function(s) pr 'Старинный телевизор в идеальном состоянии. '; if s:has('on') then if not _'room15_bedroom'.awake then pr(s:sound()); end; pr(s:vision()); end; end; ["before_Take,Pull,Push"] = 'Он слишком тяжелый. '; after_SwitchOn = function(s) _'room15_cabinet':attr('luminous'); _'#room15_at_cabinet':attr('luminous'); s:attr('luminous'); if _'room15_bedroom'.awake then pr('Ты включаешь телевизор. ' .. s:vision()); else pr('Ты включаешь телевизор. ' .. s:sound() .. s:vision()); end; end; after_SwitchOff = function(s) _'room15_cabinet':attr('~luminous'); _'#room15_at_cabinet':attr('~luminous'); s:attr('~luminous'); if _'room15_bedroom'.awake then pr 'Ты выключаешь телевизор. '; else pr 'Ты выключаешь телевизор. Странные звуки прекращаются. '; end; end; sound = function(s) if _'room15_bedroom'.awake then return 'По телевизору идет какой-то фильм про гангстеров. '; else return 'Сквозь помехи ты слышишь шум ветра и тихий вкрадчивый шепот. Среди прочих, многократно повторяется слово "{$fmt em|окно}". '; end; end; vision = function(s) if _'room15_bedroom'.awake then return 'На экране идет какой-то фильм про гангстеров. '; elseif _'room15_curtain':has('open') then if pl:where()^'room15_void' then return 'На экране с трудом различимо окно, через которое видна какая-то комната очень похожая на спальню тетушки. '; else return 'На экране с трудом различимо окно, через которое видна какая-то комната. Да там же ты! '; end; else return 'На экране с трудом различимо какое-то окно, закрытое шторами. '; end; end; before_Smell = 'Пахнет старой электроникой. '; ["before_Taste,Eat"] = 'Вряд ли это вкусно. '; ["before_Rub,Touch"] = function(s) if s:has('on') then pr 'Экран гладкий и приятный на ощупь. Ты чувствуешь легкое покалывание в пальцах от наэлектризованного кинескопа. '; else pr 'Экран гладкий и приятный на ощупь. '; end; end; ["before_Attack,Tear,Tie,Cut"] = 'Это же антикварный телевизор! Как ты можешь с ним так поступить? '; before_Blow = 'Ты сдуваешь пыль с экрана. '; ["before_Talk,Tell,Answer,Ask,AskFor,AskTo"] = function(s) if s:has('on') then if _'room15_bedroom'.awake then local phrs = { 'Из телевизора доносится: "И что дальше?"'; 'Из телевизора доносится: "Что мне с этого будет?"'; 'Из телевизора доносится: "Может мне будет проще тебя подстрелить?"'; 'Из телевизора доносится: "Сходи проспись, Винни!"'; }; pr(phrs[rnd(#phrs)]); else pr 'Зловещий шепот с экрана продолжается. '; end; else pr 'Телевизор молчит в ответ. '; end; end; before_Kiss = "Что если тебя током ударит? "; before_Take = 'Не трогай, уронишь!'; }: attr('switchable,static,on'); obj { -"пустота,тьма,темнота|ничто,ничто за окном|ничего,ничего за окном"; nam = 'room15_void'; title = 'в пустоте'; before_Enter = function(s) if _'room15_window':has('~open') then pr 'Ты не можешь пройти через закрытое окно. '; return; end; if _'room15_window'.rope then walk('room15_void'); pr 'Держась за веревку, ты аккуратно погружаешься в ничто. Гравитация здесь отсутствует и ты повисаешь в пустоте. '; else pr 'Ты не решаешься шагнуть в пустоту. Тебе нужно будет как-то вернуться. '; end; end; before_Receive = 'Тебе это не кажется хорошей идеей. '; before_LetGo = function(s, o) if pl:where()^'room15_void' then return false; elseif _'room15_window':has('open') then pr(o:Noun'им' .. ' слишком далеко. Руками не дотянуться. '); else pr('Сначала придется открыть окно. '); end; end; after_LetGo = function(s, o) if o^'statuetka' and have('statuetka') then if not _'room15_bedroom'.complete and not _'statuetka'.score then mp.score=mp.score+1; _'statuetka'.score=true; end; _'room15_bedroom'.complete = true; pr('Едва схватив ' .. _'statuetka':noun'вн' .. ', ты ощущаешь, что начинаешь падать. Веревка выскальзывает из твоей руки и ты просыпаешься от сильного удара. Ты лежишь на кровати, крепко сжимая в руке '.. _'statuetka':noun'вн' .. '. '); mp:subaction('Wake'); return end; return false; end; before_Exam = function(s) pr 'Там пусто. '; mp:content(s); end; obj = { 'statuetka'; }; before_Take = 'Как ты себе это представляешь? '; }: attr('container,enterable,transparent,open,static,concealed,luminous'): disable(); obj { -"небо за окном,небо|свет"; nam = 'room15_sky'; description = 'Чистое голубое небо. Ни облачка. '; before_Any = function(s, event) if event == 'Exam' then return false; end; pr 'Небо слишком далеко. '; end; }: attr('concealed,static,luminous'):disable(); -- Менять нельзя!!!! Это не ваш предмет!!! Вы не знаете как он выглядит, его придумает другой автор!!! --obj { -- -"статуетка"; -- nam = "statuetka"; -- description = "Статуетка."; --}