mirror of https://github.com/goraph/17rooms
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
978 lines
45 KiB
978 lines
45 KiB
-- Доступное пространство имён для объектов - все имена объектов должны начинаться с "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 = "Статуетка."; |
|
--}
|
|
|