peterburg/rooms/pantry.lua

288 lines
12 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

room {
nam = 'pantry';
title = function()
if here().seen then
return 'Клозет уборщика'
end
end;
seen = false;
dirty = false;
dsc = function(s)
mp.msg.Smell.SMELL = "Запах очень забытых вещей."
if not s.seen then
pn "{#Me} {#g/летишь,летите} из Йоханнесбурга (Земля) в Петербург (планета Проксима Центавра b). Всего четыре часа полёта в эконом-классе. Как раз, чтобы дочитать увлекательную книгу о приключениях капитана Киркунова.^";
p "Но, не {#g/успела,успел,успело,успели} {#me} закончить и первой главы, как откуда-то спереди донёсся душераздирающий крик. {#Me} {#g/увидела,увидел,увидело,увидели}, как впереди по проходу медленно шагает на чёрных щупальцах какая-то иссине-чёрная ";
p(fmt.b("инопланетная"));
p "клякса.";
pn "{#Me} {#g/бросилась,бросился,бросилось,бросились} бежать к корме судна и {#word/нырнула,нырнул,нырнуло,нырнули} в первую же комнату, чтобы найти хотя бы кого-то из экипажа.^";
p "Вдруг дверь за {#you/твор} закрылась и выставила защитные щиты.";
pn "{#Me} {#g/заперта,заперт,заперто,заперты}.^";
pn(fmt.b('Клозет уборщика^'));
s.seen = true;
end
p 'Это маленькая комнатка, мягко подсвеченная светильниками внутри стен. В углу стоит робот-уборщик. Единственная дверь на юге закрыта ярким голубым щитом.';
end;
s_to = function()
if here():has('shield') then
return 'Дверь закрыта и заблокирована прочным щитом.';
end
walk('end');
end;
obj = {
'shield',
'door',
'robot',
'safe'
};
}
obj {
-"щит/мр";
nam = 'shield';
canonical = 'щит';
description = 'Переливчатый полупрозрачный щит из неизвестного {#you/дт} материала. Его нельзя сломать и он не пропускает звук.';
before_Open = 'На щите нет дверной ручки.';
before_Listen = 'Не пропускает. Звук.';
before_Attack = 'Не пробивается.';
}:attr 'scenery,static'
obj {
-"дверь/жр";
nam = 'door';
canonical = 'дверь';
description = function()
p 'Дверь наружу.'
if here():srch('shield') then
pn 'Закрыта за прозрачным щитом.';
end
end;
before_Open = function()
if here():srch('shield') then
return 'Дверь закрыта за прозрачным щитом.';
end
return walk('end');
end
}:attr 'scenery,static,essential'
obj {
-"вырезатель,убиратель,пистолет/мр,ед|оружие/ср,ед";
nam = 'letterremover';
letter = "Р";
dsc = function(s)
if s:inside('safe') then
return 'Внутри лежит причудливый пистолет.';
end
return 'На полу лежит вырезатель.';
end;
description = function(s)
return '«Вырезатель ЕДАКТО-12» выглядит как древний пистолет с маленьким дисплеем и кнопками. На дисплее горит буква «'..s.letter..'». Из него можно СТРЕЛЯТЬ во что-то. Чтобы выставить букву А, напишите ВЫСТАВИТЬ А.';
end;
inv = function(s)
return s.letter..'-вырезатель'
end;
before_Shoot = 'Не {#plural/размахивай,размахивайте} этой штукой! Надо стрелять во что-то определённое.';
}: dict {
['вырезатель/рд'] = 'вырезателя';
['вырезатель/дт'] = 'вырезателю';
['вырезатель/вн'] = 'вырезатель';
['вырезатель/тв'] = 'вырезателем';
['вырезатель/пр'] = 'вырезателе';
}: attr 'essential'
obj {
-"робот,уборщик/мр,ед";
nam = 'robot';
description = 'У стенки стоит выключенный робот-уборщик. У него два длинных манипулятора-руки и широкие стальные гусеницы.';
before_SwitchOn = function(s)
if not (s:srch('battery')) then
p "Над кнопкой включения загорается сообщение: нет батареи.";
return true;
end
if not (s:srch('hand')) then
p "Робот оживляется, но тут же потухает. Новое сообщение: неисправность руки.";
return true;
end
lifeon('robot');
return "Робот включается и начинает тихо бурчать. Наверное, оценивает чистоту чулана.";
end;
life = function()
if here().dirty then
pn '«ВНИМАНИЕ. ОБНАРУЖЕНА ГРЯЗЬ. НЕОБХОДИМА ИНСПЕКЦИЯ.»';
p 'Робот срывается с места и начинает генеральную уборку.';
if here():srch('patina') then
pn 'Он протирает всё вокруг, тщательно счищая слой патины.'
if not _'patina'.scored then
_'patina'.scored = true
givepoint();
end
end
here().dirty = false;
end
end;
obj = {
'robot_hand',
'button'
}
}: dict {
['робот/рд'] = 'робота';
['робот/дт'] = 'роботу';
['робот/вн'] = 'робота';
['робот/тв'] = 'роботом';
['робот/пр'] = 'роботе';
}: attr 'essential,scenery,open,switchable,container'
obj {
-"сейф/мр";
nam = 'safe';
dsc = 'Напротив стоит маленький сейф.';
before_Close = function(s)
if s:has 'open' then
return 'Он выглядит слишком сломанным. Если его закрыть, сейф уже не откроется.';
end
return 'Да он и так закрыт.';
end;
description = function()
p 'Маленький оружейный сейф с электронным замком. Кто-то выдернул из него провода и подвёл к пустой выемке. Наверное, ему не хватает питания.';
return false;
end;
obj = {
'letterremover',
}
}: dict {
['робот/рд'] = 'робота';
['робот/дт'] = 'роботу';
['робот/вн'] = 'робота';
['робот/тв'] = 'роботом';
['робот/пр'] = 'роботе';
}: attr 'essential,static,container,openable,locked'
obj {
-"коробка,коробчонка,коробочка/жр|коробочек/мр";
nam = 'box';
found_in = 'pantry';
dsc = 'Возле робота лежит маленькая коробка.';
description = function(s)
p 'Картонная коробка с надписью "ХРУПК-".';
return false;
end;
obj = {
'battery'
}
}: dict {
['коробка/рд'] = 'коробки';
['коробка/дт'] = 'коробке';
['коробка/вн'] = 'коробку';
['коробка/тв'] = 'коробкой';
['коробка/пр'] = 'коробке';
}: attr 'container,female,openable';
obj {
-"батарея,батарейка/жр";
nam = 'battery';
dsc = function(s)
if s:inside('box') then
return 'Внутри лежит маленькая батарея.';
end
return 'На полу лежит маленькая батарея.';
end;
description = 'Сменная батарея для бытовой электроники типа «крона». Одному пылесосу её хватает на тридцать лет.';
before_Insert = function(self, what)
if what^'robot' then
pn "На панели робота зажигается огонёк. Можно попытаться его включить.";
return false;
end
if what^'safe' then
pn 'Дверца сейфа с щелчком открывается.';
_'safe':attr('open');
return false;
end
return "Это нельзя запитать от батареи.";
end;
}: dict {
['батарея/рд'] = 'батареи';
['батарея/дт'] = 'батарее';
['батарея/вн'] = 'батарею';
['батарея/тв'] = 'батареей';
['батарея/пр'] = 'батарее';
['батарейка/рд'] = 'батарейки';
['батарейка/дт'] = 'батарейке';
['батарейка/вн'] = 'батарейку';
['батарейка/тв'] = 'батарейкой';
['батарейка/пр'] = 'батарейке';
}: attr 'essential'
obj {
-"кнопка/мр|выключатель/мр";
nam = 'button';
description = 'Кнопка включения робота. Ничего примечательного.';
}: attr 'essential,scenery,switchable'
obj {
-"манипулятор/мр";
nam = 'robot_hand';
description = 'Манипулятор робота типа «рука». Имеет пальцы. Может хватать. Может сгибаться. Много чего может.';
}: attr 'essential,scenery'
obj {
-"пластинка/жр";
nam = 'plastinka';
dsc = 'На полке лежит пластинка.';
canonical = 'пластинка';
found_in = 'pantry';
description = 'Старая прозрачная пластинка. Народные финские песни в жанре хеви-метал. Она бесполезна без проигрывателя.';
}: dict {
['пластинка/рд'] = 'пластинки';
['пластинка/дт'] = 'пластинке';
['пластинка/вн'] = 'пластинку';
['пластинка/тв'] = 'пластинкой';
['пластинка/пр'] = 'пластинке';
}
obj {
-"стенд/мр";
nam = 'stand';
dsc = 'На стене покосился пожарный стенд.';
canonical = 'стенд';
found_in = 'pantry';
description = function(s)
p 'Красный пожарный стенд с крупной надписью уверенными жёлтыми буквами: «НЕ ГОРИТЕ».';
if s:srch('rukav') then
pn 'Стенд почти пуст, на нём висит только кусок пожарного рукава.';
else
pn '{#Me} {#g/сняла,снял,сняло,сняли} со стенда всё, что там висело.';
end
end;
obj = {
'rukav'
};
}: dict {
['стенд/рд'] = 'стенда';
['стенд/дт'] = 'стенду';
['стенд/вн'] = 'стенд';
['стенд/тв'] = 'стендом';
['стенд/пр'] = 'стенде';
}: attr 'static'
-- важно: стенд это не контейнер, на него нельзя повесить что угодно, только снять
obj {
-"рукав/мр";
nam = 'rukav';
canonical = 'рукав';
description = 'Несколько метров серого пожарного рукава. Кто-то прорезал в нём дырки в форме звёздочек. При пожаре он не поможет, но хотя бы выглядит красиво.';
}
obj {
-"булавка/жр";
nam = 'bulavka';
canonical = 'булавка';
found_in = 'pantry';
dsc = 'На полу лежит булавка.';
description = 'Швейная безопасная булавка. Ничего примечательного.';
}: dict {
['булавка/рд'] = 'булавки';
['булавка/дт'] = 'булавке';
['булавка/вн'] = 'булавку';
['булавка/тв'] = 'булавкой';
['булавка/пр'] = 'булавке';
}