jacques/objects.lua

381 lines
24 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.

door1_obj = obj{
nam = 'дверь 1',
dsc = 'Здесь есть {дверь 1}, ',
act = 'Табличка на двери гласит: "За этой дверью находится смерть."',
}
door2_obj = obj{
nam = 'дверь 2',
dsc = '{дверь 2} и ',
act = 'Табличка на двери гласит: "Это -- безопасная дверь"',
}
door3_obj = obj{
nam = 'дверь 3',
dsc = '{дверь 3}.',
act = 'Табличка на двери гласит: "Смерть за дверью 2"',
}
-- === Испытание 2 ===
cobj = function(v)
v.use = function(this,that)
if (here() == end_fall) then return 'Нет, вы уже пропустили свой шанс.',false; end;
return call(this, 'fuse', that);
end;
v.used = v.use;
return obj(v);
end
rope = cobj{
nam = 'верёвка',
wet = false,
inv = function()
local response = 'Длинная крепкая пеньковая верёвка.';
if (rope.wet) then response = response .. "Немного мокрая, всего-то." end;
return response;
end,
fuse = function(this, that)
if (that == 'lock') then
inv():del('lock');
inv():del('rope');
inv():add('rope_with_lock');
return 'Вы привязываете к концу верёвки замок.'
elseif (that == 'waterskin') then return 'Вы капаете немного воды на верёвку.';
end;
end,
}
boat = cobj{
nam = 'лодка',
inv = 'Складная одноместная лодка с вёслами. На верхней части одного из бортов нарисован человечек, из плеч которого выходят 4 линии.',
fuse = function(this, that)
if (that == 'stick') then
inv():del('stick');
inv():del('boat');
inv():add('boat_with_stick');
return 'Вы раскладываете лодку и укрепляете на ней палку, как мачту.'
elseif (that == 'lock') then
inv():del('boat');
inv():del('lock');
inv():add('chute_lower');
return 'Вы кладёте замок на стенку лодки так,чтобы совместить рисунки на них.'
end;
end,
}
chute_lower = cobj{
nam = 'Лодка с замочком',
inv = 'Лодка с замочком на ней. На них изображен человек,из плеч которого выходят 4 длинных линии.',
fuse = function(this, that)
if (that == 'pot') then
inv():del('chute_lower');
inv():del('pot');
inv():add('chute');
return goto('landing');
end;
end,
}
chute_upper = cobj{
nam = 'горшок с замочком',
inv = 'горшок с замочком на нём. На этой конструкции изображены 4 линии, которые входят в полукруг.',
fuse = function(this, that)
if (that == 'boat') then
inv():del('chute_upper');
inv():del('boat');
inv():add('chute');
return goto('landing');
end;
end,
}
chute = cobj{
nam = 'парашют',
inv = 'Да! Да! Огромный кусок ткани, который вылезает из рюкзака на вашей спине Джека. Джек не знает,как его правильно упаковать обратно.',
}
cape = cobj{
nam = 'плащ',
inv = function()
local response = 'Заботливо сложенный коричневый плотный плащ. Хорош в сырую погоду и неплох для скрытного лазания по лесу.';
if cape.wet == true then response = response.." Да, ещё плащ промок до нитки." end;
return response;
end,
wet = false,
}
boat_with_stick = cobj{
nam = 'лодка с палкой',
inv = 'Одноместная лодка с вёслами; рядом с сиденьем прикреплена палка, как мачта. От этого сидеть внутри ещё неудобнее, но возможно; впрочем, куда вам уплыть в свободном полёте.',
fuse = function(this, that)
if (that == 'cape') then
inv():del('cape');
inv():add('sailboat');
inv():del('boat_with_stick');
return 'Вы прикрепляете на мачту плащ и получаете... парусную лодку!';
end;
end,
}
sailboat = obj{
nam = 'парусная лодка',
inv = 'Одноместная лодка с двумя вёслами и самодельным парусом из плаща и палки. Трудно сказать, далеко ли вы уплывёте.'
}
rope_with_lock = cobj{
nam = 'верёвка с замком',
inv = 'Длинная пеньковая верёвка, на конце которой болтается тяжеленный амбарный замок. В принципе, это можно использовать как оружие..возможно, метательное.',
}
pot = cobj{
nam = 'горшок',
inv = 'Пустой глиняный коричневый горшочек.На нижней части стенки нарисован полукруг.',
fuse = function(this, that)
if (that == 'waterskin') then
inv():del('pot');
inv():del('waterskin');
inv():add('pot_with_water');
return 'Вы заполняете горшок водой.';
elseif(that == 'rope') then
inv():del('pot');
inv():del('rope');
inv():add('pot_with_rope');
return 'Вы кладёте в горшок верёвку.';
elseif(that == 'black_powder') then
inv():del('pot');
inv():del('black_powder');
inv():add('pot_with_powder');
return 'Вы заполняете горшок чёрным порохом.';
elseif (that == 'lock') then
inv():del('pot');
inv():del('lock');
inv():add('chute_upper');
return 'Вы кладёте замок под горшочек и совмещаете рисунки на них.'
end;
end,
}
stick = cobj{
nam = 'палка',
inv = 'Толстая ветка средней длины. На неё хорошо опираться во время ходьбы по горам.',
fuse = function(this, that)
if (that == 'rope') then
inv():del('stick');
inv():del('rope');
inv():add('club');
return 'Вы обвязываете верёвкой палку. Такой дубинушкой можно и пришибить!';
elseif (that == 'rope_with_lock') then
inv():del('stick');
inv():del('rope_with_lock');
inv():add('mace');
return 'Вы привязываете свободный конец верёвки к палке. У вас получилось настоящее оружие!';
end;
end,
}
lock = cobj{
nam = 'амбарный замок',
inv = 'Амбарный навесной замок. Большой и увесистый.На обратной стороне замка нарисовано 4 линии.'
}
club = cobj{
nam = 'дубина',
inv = 'Толстая палка, обмотанная верёвкой вполне может послужить как хорошая дубинка.',
fuse = function(this, that)
if (that == 'lock') then
inv():del('club');
inv():del('lock');
inv():add('mace');
return 'Вы разматываете верёвку и навешиваете на неё замок. У вас получилась недурная булава.';
end;
end,
}
mace = cobj{
nam = 'булава',
inv = 'Один конец верёвки привязан к палке, на втором болтается тяжёлый замок. Это же настоящая цепная булава!',
}
pot_with_powder = cobj{
nam = 'горшочек с порохом',
inv = 'Горшок из коричневой глины, заполненный чёрным порохом. Не переворачивать.',
fuse = function(this, that)
if (that == 'rope') then
inv():del('pot_with_powder');
inv():del('rope');
inv():add('bomb');
return 'Вы кладёте в порох верёвку как фитиль. У вас получилась самодельная бомба.';
end;
end,
}
pot_with_rope = cobj{
nam = 'горшок с верёвкой',
inv = 'Горшок из коричневой глины, в котором лежит верёвка.',
fuse = function(this, that)
if (that == 'black_powder') then
inv():del('pot_with_rope');
inv():del('black_powder');
inv():add('bomb');
return 'Вы заполняете горшок чёрным порохом и вытаскиваете верёвку как фитиль. У вас получилась самодельная бомба.';
end;
end,
}
black_powder = cobj{
nam = 'чёрный порох',
inv = 'Небольшой мешочек с чёрным порохом. Хранить в сухом и холодном месте. Вблизи лучше не чихать.',
}
bomb = cobj{
nam = 'бомба',
inv = 'Горшок, доверху наполненный чёрным порохом, из которого высовывается отрезок верёвки. Настоящая самодельная бомба. Если порох будет сухим, такая сможет взорвать небольшое каменное здание.'
}
waterskin = cobj{
nam = 'мех с водой',
inv = 'Мех с водой.',
fuse = function(this, that)
if (that == 'cape') then
inv():del('waterskin');
cape.wet = true;
return 'Вы выливаете воду на плащ и он становится мокрым.';
end;
end,
}
plantain = cobj{
nam = 'листья подорожника',
inv = 'Несколько листьев подорожника большого (Plantago major), травянистого растения семейства Подорожниковые.',
fuse = function(this, that)
if (that == 'cape' and cape.wet) then
inv():del('cape');
inv():del('plantain');
inv():add('compress');
return 'Вы заворачиваете листья в мокрый плащ и получаете лечебный компресс с листьями подорожника. Хотя немного не угадали с размером. ';
elseif (that == 'axe') then return 'Вы отрубаете кусочек от одного из листочков. У вас всё ещё в руках листья подорожника и топор.'
elseif (that == 'knife') then return 'Вы отрезаете кусочек от одного из листочков. У вас всё ещё в руках листья подорожника и топор.'
end;
end,
}
compress = cobj{
nam = 'компресс',
inv = 'Лечебный компресс с листьями подорожника. Если вы ушибнетесь всей спиной (что вполне возможно в вашей ситуации), то может быть, он потом вас вылечит...хотя в вашем случае, вряд ли.',
}
knife = cobj{
nam = 'нож',
inv = 'Охотничий нож с резной рукоятью.',
}
axe = cobj{
nam = 'топор',
inv = 'Большой железный топор для рубки деревьев...может быть, и для чего другого сгодится.',
}
pot_with_water = cobj{
nam = 'горшок с водою',
inv = 'Глиняный коричневый горшочек, заполненный водой.',
fuse = function(this, that)
if (that == 'axe') then
inv():del('pot_with_water');
inv():del('axe');
inv():add('axe_porridge');
return 'Вы кладёте в горшок топор. Часть воды выливается.';
end;
end,
}
axe_porridge = cobj{
nam = 'каша из топора',
inv = 'В маленьком глиняном горшочке, доверху заполненном водой, лежит топор. Наверное, это будущая каша.',
}
-- === Испытание 3 ===
fountain = obj{
nam = 'фонтан',
dsc = 'В центре площади стоит высохший {фонтан}. На брусчатке рядом лежит столб с надписью: "Вы стоите на площади имени Звёздных Королей".',
act = [[В центре шестиугольного бассейна с водой стоит статуя. Мужчина с мечом верхом на драконе; пасть дракона раскрыта. Скорее всего, из неё когда-то текла вода. Джек смутно узнаёт изображение Торма, бога долга и честности -- но его смущает голова мужчины. Присмотревшись, он понимает, что голова статуи была не очень умело заменена другой -- возможно, более подходящей. Кто теперь восседает на драконе Верности, остаётся только гадать.^
Фонтан не работает; вода в чаше позеленела, и от неё исходит слабый, но различимый болотный запах.]]
--http://www.wizards.com/dnd/images/fp_gallery/fp1/Torm_p75.jpg
}
citizen = obj{
nam = 'местный житель',
number = 0,
description = {
citizen_man_description(),
'Вокруг Джека вертится бездомная {собака}.',
'Мимо проходит, звеня доспехами, {страж} города.',
},
dsc = function(object)
object.number = rnd(#object.description);
return object.description[object.number];
end,
act = function() goto(deref("citizen_"..citizen.number));number = rnd(#citizen.description); end, --NPC не изменится, пока с ним не заговоришь; это довольно нереалистично, но приемлимо.
}
elm_st = obj{
nam = 'Улица Вязов',
dsc = 'В конце улицы стоит немного покосившийся указательный столб. Единственный выживший указатель на нём показывает на улицу справа: {"Улица Вязов".}',
act = 'Не стоит. Ещё заблудиться в этом городе не хватало.'
}
plain_11 = obj{
nam = 'дом 11 на Плоской улице',
dsc = 'Большинство домов закрыто наглухо. Ставни заколочены, двери заперты. Лишь в трёх домах открыты двери: {дом 11,} ',
act = 'За открытой деревянной дверью Джек обнаруживает закрытую железную. Похоже, хозяева не открыли двери, а просто решили немного проветрить жилище.'
}
plain_12 = obj{
nam = 'дом 12 на Плоской улице',
dsc = '{дом 12} ',
act = [[Узкий каменный дом втиснут между домами 14 и 10½. Его окна не закрыты ставнями, но зашторены. {door_12:Дверь} открыта; изнутри доносятся голоса.]]
}
door_12 = xact("door", code[[return goto 'corridor']])
plain_7 = obj{
nam = 'дом 7 на Плоской улице',
dsc = 'и {дом 7}.'
}
mat = obj{
nam = 'коврик для ног',
dsc = 'Джек стоит на {коврике}.',
act = 'Грязный коврик с истёршейся надписью: "Добро пожаловать" лежит на таком же грязном полу.'
}
rack = obj{
nam = 'вешалка',
dsc = 'По правую руку находится {вешалка.}',
act = 'На двух рядах изысканно закрученных крючков висят загрязнённые плащи, накидки и шапероны разных размеров. Под ними выстроена {shoes:обувь.}',
}
shoes = xact("shoes_act","Чёрные мужские сапоги, коричневые женские ботинки, чёрные женские ботинки, чёрные мужские туфли, фиолетовые туфли для копыт.")
umbrellas = obj{
nam = 'подставка для зонтиков',
dsc = 'Рядом с ней стоит {подставка для зонтиков.}',
act = 'Пустая подставка для зонтиков. Совершенно сухая.'
}
bench = obj{
nam = 'скамейка',
dsc = 'По левую руку стоит короткая {скамейка,} ',
act = 'Коротенькая низенькая скамейка для того,чтобы надевать на ней обувь.'
}
stand = obj{
nam = 'этажерка',
dsc = 'далее -- невысокая {этажерка} ',
act = 'В этажерке лежат шнурки, обувные щётки, ложки и прочий бытовой хлам.'
}
wardrobe = obj{
nam = 'шкаф для верхней одежды',
dsc = 'и {шкаф.}',
act = 'В шкафу висят чистые и сухие плащи и накидки. Под ними стоит пара красных сапог.'
}
helia = xact("helia_octant","") --TODO
follow = xact("follow_helia", code[[return goto 'vanishing_1']])
bookcase = xact('bookcase',[[Старый книжный шкаф наполовину пуст. Хотя он выглядит очень старым, в нём не видно ни одной старой книги.]])
rug = xact('rug',[[Красочный ковёр, на котором изображён кто-то из кошачьих. Кто бы это ни был, его жёлтая шерсть и красная раскрытая пасть..не то чтобы пугают, но скорее внушают уважение.]])
sofa = obj{
nam = 'sofa',
act = function()return goto('vanishing_1_continue')end,
}
parents_bed = xact("кровать родителей","Мягкая двуспальная кровать, не заправленная с левой стороны.")
parents_cabinet = xact("прикроватный шкафчик родителей","Ящички шкафчика закрыты на ключ.")
parents_wardrobe = xact("платяной шкаф родителей","Платья, костюмы, рубашки, штаны. Обычная одежда.")
parents_mirror = xact('зеркало родителей',"В неровном зеркале отражается лицо Джека... либо это лицо Джека такое неровное?")
parents_window = xact("окно родителей","Кривоватое стекло, вставленное в раму. Окно не открывается. Внизу виден пустынный задний двор.")
guest_bed = xact("кровать для гостей","Простейшая деревянная кровать для одного человека. Без подушки.")
guest_table = xact("столик для гостей","Столик на четырёх ножках. Никакой роскоши.")
guest_window = xact("окно гостей",[[Встав на табуретку, можно лучше рассмотреть задний двор из окна. На подоконнике заметно много следов чьих-то босых ног. В окно вылезали и влезали как минимум дважды.^^
Джек открывает окно и смотрит вниз. Под ним идёт совершенно гладкая стена.^^Джек закрывает окно.]]) -- Оан не пользуется дверью детской
guest_rag = xact("ковёр гостевой","Мохнатый красный ковёр, на котором изображён воин, побеждающий золотого дракона.")
guest_wardobe = xact("шкаф для гостей","В шкафу висит одинокая серая рубашка. Слишком мала для Джека.") -- рубашка принадлежит Оану, это -- его старая, он уже из неё вырос. Деталь незначительная, но у игрока может возникнуть подозрение.
kids_bed = xact("кровать в детской",[[Двухярусная деревянная детская кровать. На верхнем ярусе нет подушки, а одеяло поменьше, чем на нижнем.]])
kids_toys = xact("ящик с игрушками",[[Солдатики, куклы и палочки.]])
kids_rug = xact("ковёр в детской",[[Ковёр наполовину сожжён, но уцелевшая часть выглядит довольно красиво. Похоже, дети любят пошалить.]])
kids_apple = xact("яблоко в детской",[[Чьё-то недоеденное яблоко на ковре. Пусть лежит, я не страдаю клептоманией.]])
kids_walls = xact("стены детской",[[Стены ужасно грязные. Они перемазаны сажей и от них идёт слабый запах яблока. Похоже, сажа смешалась с яблочным соком.]])
kids_window = xact("окно в детской",[[Окно открывается внутрь; на подоконнике много босых следов.^^Джек открывает окно и смотрит вниз. Под окном идёт совершенно гладкая стена.^^Джек закрывает окно.]])
kids_books = xact("книжный шкаф в детской",[[Книги для детей, бумага, перья, чернильницы, записные книжки... Судя по слою пыли на книгах, развивающие сказки не популярны.]])
kids_wardrobe = xact("платяной шкаф в детской",[[В правой части -- одежда мальчика, в левой -- одежда девочки. На внутренней стороне каждой из дверец шкафа висит по зеркалу.]])
toilet_pot = xact("pot_act", "Небольшой горшок. Лёгкий запах намекает на его назначение.")
toilet_bath = xact("bath_act", "Что-то подсказывает Джеку, что в ней моются.")
toilet_sticks = xact("sticks_act", "Браться за "..txtb('верхний').." конец.")
toilet_window = xact("window_act", "Джек знает, зачем нужно это окно. И что бывает с теми, кто ходит под ним.")
fence = xact("забор", "В заборе нет калитки и он слишком высок даже для Джека.")
house_back = xact("задняя стена дома", "Задняя стена дома видна превосходно. На первом этаже есть дверь и два окна. Между первым и вторым этажами идёт узенький карниз. На втором этаже находятся три окна. Выше виден только скат {roof:крыши}.")
roof = xact("крыша","Черепица нетронута -- во всяком случае, на краю.")
vanessa_seeking = obj{
nam = 'Ванесса, ищущая дневник',
dsc = [[Книжный шкаф открыт; в книгах копается молодая {девушка}.]],
act = code[[goto('meet_vanessa')]]
}