381 lines
24 KiB
Lua
381 lines
24 KiB
Lua
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')]]
|
||
}
|