jacques/rooms.lua

251 lines
22 KiB
Lua
Raw Permalink 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.

main = room {
nam = "Около 300 лет назад. Континент Рубинов.",
dsc = [[
Последний символ засветился на стене, и Лимзогнок начал ритуал.^^
Из-за закрытой двери доносился тихий гул призраков. Лимзогнок не держал живых слуг - они имели мозги, а значит, в эти мозги мог кто-нибудь залезть (кто-нибудь, кроме самого Лимзогнока). Духи подчинялись беспрекословно и не раздумывая. И, хотя это доставляло некоторые проблемы (например, приказы "Пригоните мои тапочки" или "Приготовьте мою постель, да помягче" понимались буквально), Лимзогнок мирился с такими неудобствами.^^
До Лимзогнока донеслись очень слабые волны сознания. Лимзогнок не обратил внимания - он не мог прервать ритуал только потому,что у какой-нибудь вороны в воздухе рядом случилось просветление мыслей.^^
Внезапно окно за его спиной разлетелось на тысячу осколков. В ту же секунду распахнулась дверь, и двое людей - дин прилетевший из окна, второй ворвавшийся в дверь - прыгнули на волшебника, занося кинжалы.^^
]]..txtem('--Удержание.')..[[^^
Хотя ритуал вытянул все силы из Лимзогнока, тот всегда держал определённые заклинания в неприкосновенном запасе, хотя ему это давалось истинным чудом.^^
Пока неудавшиеся убийцы висели в прыжке, не в силах двинуть единым мускулом, волшебник копался в их головах. Странно,но оба были невероятно тупы - даже для обычных людей. Подарок судьбы? Нет, Провидение редко делает такие филигранно точные подарки. Лимзогнок улыбнулся и сделал два мягких шага:^^
-- Итак, вы сами пришли ко мне. А между прочим, я уже был готов собственноручно поймать двух таких остолопов. Вы -- болваны, ребята. Интеллектуальные ноли. По сути, просто исполнители приказов. И я очень рад вам сообщить, что я хочу подарить вам разум.^^
Волшебник описывал вычурные фигуры вокруг своих жертв; его шаги были мягки, как у кошки. Он то убыстрял темп ходьбы, то замедлял его, говоря в такие моменты особенно сладко.^^
Вы спросите меня, как? -- в глазах убийц вряд ли читался вопрос, но Лимзогнок продолжал бросаться словами, -- Очень просто. Мы сыграем в игру. Я буду задавать вам загадки, а вы -- решать их. Если вы их не сможете решить... что ж, я подумаю, стоит ли мне работать с вами дальше.
Ну,а пока что... выпейте это. Вас ждёт глубокий сон.]],
obj = {vway('дальше', '{Начать игру}.', 'three_doors') },
}
three_doors = room {
nam = 'Светлая комната',
enter = [[Джек проснулся в светлой комнате с каменными стенами. В его голове раздался голос:^^
,,Сообщаю тебе, что первая загадка -- это детская забава. Всего одна из табличек на дверях правдива, за двумя дверями тебя ждёт смерть. Постарайся не проиграть, пожалуйста. Мне будет обидно закончить, не успев ничего начать. К тому же, твой напарник не справился.'']],
dsc = [[Светлая пустая комната с каменными стенами. Откуда идёт свет, вам непонятно.]],
obj = {'door1_obj','door2_obj','door3_obj'},
way = {vroom('Дверь 1', 'act1'),'door2_room','door3_room'}
}
door2_room = room{
nam = "Дверь 2",
dsc = [[Как только Джек открывает дверь, на него набрасывается разъярённый тигр и разрывает его в клочья.^^]]..txtc(txtb('КОНЕЦ ИГРЫ')),
obj = {vway('повтор','{Повторить?}','three_doors')},
}
door3_room = room{
nam = "Дверь 3",
dsc = [[Как только Джек открывает дверь, его поражает сноп серебряных молний.^^]]..txtc(txtb('КОНЕЦ ИГРЫ')),
obj = {vway('повтор','{Повторить?}','three_doors')},
}
act1 = room{
nam = 'Часть 1',
enter = function() pl.Points = pl.Points+10 end,
dsc = txtr(txtem([[День 3044.]]))..[[^^Сегодня на меня было совершено покушение.^^Читатель моего дневника мог подзабыть, но за всё время проведения эксперимента я столкнулся всего лишь с тремя помехами. ^^
Первой помехой был король Песчаного королевства, который внезапно вышел из-под моего контроля и чуть не испортил мои планы в самом начале. Его королевство дорого поплатилось за этот акт непослушания, но я в конце концов простил их и даже сделал одним из Двух. Между прочим, на троне до сих пор сидит тот же король..хотя, это скорее не из-за моей доброты, а просто потому что он такой удобный дурак. Ладно,я отвлёкся.^^
Следующим был какой-то парень из Звёздных Лесов, который проник через железный занавес и начал сеять смуту. Нарушение герметичного развития целой страны! Мне пришлось полностью изолировать оба государства.
И вот -- теперь на меня совершено покушение. По сравнению с первыми попытками мне помешать эта выглядит какой-то мелкой. Я думал, уж не стоит ли за этими идиотами кто-нибудь поумнее -- но их головы пусты. Хмм... ^^
Я не хочу углубляться в паранойю, но ведь теоретически мог появиться волшебник, равный мне по силе..который стёр все следы своего воздействия из мозгов этих олухов..и отдал им точные приказы.^^
Мда. Очень, очень маловероятно. В любом случае, мне стоит быть осторожнее. Возможно, в ближайшее время я уйду в один из смежных планов -- а лучше, далёких планов или миров. Так я действительно буду наблюдателем, не вмешиваясь и не будучи внутри наблюдаемого континента. Следует подумать над экстренным свитком телепортации...в какие-нибудь богами забытые королевства.]],
--Последняя фраза сохранила отсылку к Forgotten Realms (Забытым Королевствам). Первоначально игра задумывалась с привязкой к этому сеттингу.
obj = {vway('дальше','{Продолжить игру}','falling')},
}
falling = room{
steps = 0,
Times = 0;--количество попыток
nam = "В воздухе",
enter = function()
inv():zap();
falling.steps = 0;
falling.Times = falling.Times+1;
inv():add('rope');
inv():add('pot');
inv():add('waterskin');
inv():add('knife');
inv():add('axe');
inv():add('black_powder');
inv():add('stick');
inv():add('lock');
inv():add('boat');
inv():add('cape');
inv():add('plantain');
lifeon('falling');
cape.wet = false;
rope.wet = false;
return [[Как только Джек открыл дверь, свет в комнате погас.Знакомый голос сказал:^^
"Да, ты выбрал верно. Продолжаем игру. Второй раунд! ]]..txtem('Телепорт."');
end,
life = function()
falling.steps=falling.steps+1;
if (falling.steps == 0) then return 'Над вами -- только звёзды. Они быстро удаляются.';
elseif (falling.steps==1) then return 'Вы различаете крыши домов внизу.';
elseif (falling.steps == 2) then return 'Вы пролетаете мимо орла.';
elseif (falling.steps == 3) then return 'Вы видите транспаранты и плакаты на стенах города: "Песчаное королевство -- наш друг и помощник в борьбе против эльфийской дряни!", "Поднимем знамя Войны за дело Мира!", "Сагиттир -- наместник Звёздных Королей!"';
elseif (falling.steps == 4) then return 'Вы можете увидеть людей, идущих по улицам.';
elseif (falling.steps > 4) then
ACTION_TEXT = nil;
if have('chute') then return goto('landing'),true;
else return goto('end_fall'),true;
end;
end;
end,
dsc = "Вы находитесь в свободном полёте. На вас быстро падает земля...или вы на неё падаете, что для вас одно и то же. Похоже, что внизу лежит какой-то большой город. Вы почти не чувствуете веса рюкзака на спине."
}
end_fall = room{
nam = 'Земля',
enter = function()
a = rnd(9);
lifeoff('falling');
end,
dsc = function() return txtem("Полёт Пера.")..[[^^В самый последний момент, когда до земли остаётся несколько метров, Джек останавливает полёт и начинает плавно спускаться.Голос в голове Джека возмущается: ^^"]]..comment_things()..'"' end,
obj = {vway('повтор','{Повторить?}','falling')},
}
landing = room{
nam = 'Мягкая посадка',
enter = function()
if have('chute') then return 'Вы совмещаете рисунки на трёх предметах и получаете рисунок: человек, из плеч которого выходят 4 длинных линии и заканчиваются в полукруге. В ту же секунду вы чувствуете, как из ваших плеч вырастают волшебные верёвки. Вы поднимаете глаза и видите над собой круглый купол. Вы медленно спускаетесь на землю.' end;
end,
dsc = [[Как только вы приземляетесь, просыпается знакомый голос. Вы не знаете, откуда он идёт; кажется, что отовсюду сразу.^^-]]..comment_time()..[[^^
Ладно, я слишком многословен. Продолжаем! ]]..txtem('Сон.'),
obj = {vway('далее','{Перейти к следующей загадке}','act2')},
}
act2 = room{
nam = "Часть 2",
dsc = [[]],
obj = {vway('next','{Продолжить игру}','square')}
}
square = room{
nam = 'Площадь им. Звёздных королей',
enter = function(from, to)
if (from == 'act2') then return [[
-- "Не буду тянуть кота за хвост, твоя задача проста. Ты находишься в Звёздных Лесах, город Руйцикон. Твоя задача -- найти Эндрю Октанта. Хотя бы просто выяснить, где он может быть. Действуй.]]
end
end,
--http://venividi.ru/files/img/4224/4.jpg
dsc = [[Джек стоит на вымощенной брусчаткой площади. Площадь имеет форму треугольника, из углов которого выходит по улице. "Стороны" этого треугольника образованы очень плотно стоящими двухэтажными деревянными домиками, расписанными в разные цвета.^^
Небо закрыто тёмными облаками, в которых не видно солнца.]],
obj = {'fountain','citizen'},
way = {'chaos_st','ink_st','plain_st'}
}
chaos_st = room{
nam = "Улица Хаоса",
dsc = "",
way = {'square'}
}
ink_st = room{
nam = "Улица Чернил",
_visited = false,
enter = function()
if (ink_st._visited) then return '' end
ink_st._visited = true;
return "Джек смотрит на облетевшие деревья по краям улицы. Редкий сильный ветер гоняет одинокие жёлтые листья. ,,А ведь уже зима'' -- грустнеет Джек.";
end,
dsc = [[Джек входит в узкую короткую улочку. На одном из домов по левую руку висит табличка: "Улица Чернил, дом 3".^^
]],
obj = {'elm_st'},
way = {'square'}
}
plain_st = room{
nam = "Плоская Улица",
dsc = [[Под ноги Джеку попадается ржавая табличка: "Плоская Улица, дом 6".^^
Дома на этой улице сделаны не из дерева, как в остальной части города,а из камня.]],
obj = {'plain_11','plain_12','plain_7','door_12'},
way = {'square'}
}
corridor = room {
nam = 'Коридор дома № 12, Плоская Улица',
_steps = 0,
enter = function() lifeon('corridor'); end,
exit = function()
lifeoff('corridor');
corridor.nam = 'Коридор';
end,
life = function()
if (corridor._steps == 3) then return goto('apprehension') end;
corridor._steps = corridor._steps+1;
return;
end,
dsc = [[Джек заходит в узкий коридор. Прямо напротив входа идёт лестница на второй этаж. Где-то наверху слышен топот ног.]],
obj = {'mat','rack','umbrellas','bench','stand','wardrobe','shoes'}
}
vanishing_1 = room{
nam = 'Гостиная',
dsc = [[
Гостиная находится справа от лестницы. Это очень большая комната с тремя окнами; одно справа и два напротив двери. Слева от входа стоит {bookcase:книжный шкаф}. Слева от дальнего окна стоит сервант. Напротив него -- длинный низкий диван, покрытый бархатом. На полу лежит {rug:ковёр}.
-- Эндрю здесь нет. - говорит хозяйка, увидев Джека.^^
Она стоит у серванта, держа в руке полный бокал с тёмной жидкостью. За открытой дверцей рядом с ней видна бутылка.. наверное, не с чаем.^^
-- Просто скажите мне, когда и где видели его в последний раз.^^
Она вливает в себя содержимое бокала и наливает ещё один.^^
-- Садитесь. -- она кивает на широкий {sofa:диван} у окна.
]],
obj = {'bookcase','rug','sofa'}
}
stairs = room{
nam = 'Лестница',
dsc = [[Джек стоит на широкой лестнице. Лестница спускается к коридору и гостиной. На втором этаже напротив лестницы стоят две двери; справа находятся ещё две.]],
way = {'dining','parents','kids','guests','toilet','corridor'}
}
--Лестница стоит прямо напротив коридора и такой же ширины.
--Гостиная начинается там же, но из коридора не видна. За счёт лестницы она кажется больше.
--Рядом с гостиной находится кухня.
--На втором этаже - 3 спальни (хозяева, дети, гости), туалет.
--Вход в подвал находится на кухне. В подвале хранятся продукты.
--Хилли убирается в детской, Оан ищет в подвале заначку, Хелия запирается в своей комнате, Ванесса открывает кабинет и ищет свой дневник
dining = room{
nam = 'Гостиная',
dsc = [[]],
way = {'stairs','kitchen','parlor'}
}
kitchen = room{
nam = 'Кухня',
dsc = [[]],
way = {'dining','basement','backyard'}
}
basement = room{
nam = 'Подвал',
dsc = [[В подвале много шкафов с продуктами. На полках стоят банки, мешочки, мешки. Твёрдый дикий смешанный запах говорит о том, что не все продукты успевают в салат свежими.]],
way = {'kitchen'}
}
parents = room{
nam = 'Спальня родителей',
enter = function()
return [[Из-за закрытой двери слышен голос Хелии: ,,Не входите! Мне надо побыть одной.'']],false;
end,
dsc = [[В центре комнаты стоит {parents_bed:двуспальная кровать}. Справа рядом с кроватью находится низенький {parents_cabinet:шкафчик}, на котором стоит большое {parents_mirror:зеркало}. Слева от кровати -- платяной {parents_wardrobe:шкаф}. Из большого {parents_window:окна} виден кусочек улицы.]],
way = {'kitchen'}
}
kids = room{
nam = 'Детская',
_wet = true,
enter = function()
if kids._wet == true then-- двойственное выражение, ну да ладно
return [[Как только Джек открывает дверь, ему на голову опрокидывается бадья с водой.^^
Пока Джек приходит в себя, на него падает и сама железная бадья. Джек охает и падает на пол.^^
Он встаёт и ощупывает голову. Похоже, будет крупная шишка.]]
end
end,
dsc = [[У стены стоит двухярусная {kids_bed:кровать}, под которую засунут {kids_toys:ящик с игрушками}. На полу лежат обугленный {kids_rug:ковёр} и {kids_apple:яблоко}. {kids_walls:Стены} запачканы сажей и соком. {kids_window:Окно} открыто.^^
Одну из стен полностью занимает огромный {kids_books:шкаф} с книгами и рисунками. Ещё один {kids_wardrobe:шкаф}, поменьше, стоит возле кровати.]],
way = {'kitchen'}
}
guests = room{
nam = 'Гостевая',
enter = function() if meet_oan:pseen(1) then goto('meet_oan') end end,
dsc = [[Комната кажется большой; на самом деле, в ней просто мало мебели.^^
У стены стоит простая {guest_bed:кровать}, рядом стоит {guest_table:столик}. К {guest_window:окну} приставлена табуретка. На полу лежит {guest_rag:ковёр}. В углу стоит {guest_wardobe:шкаф}.]],
way = {'kitchen'}
}
toilet = room{
nam = 'Туалет',
dsc = [[Джек заходит в туалет. Здесь стоят {toilet_pot:горшок}, несколько {toilet_sticks:палок} и огромная {toilet_bath:бадья} с водой. Из небольшого {toilet_window:окна} падает свет.]],
way = {'kitchen'}
}
parlor = room{
nam = 'Кабинет',
enter = function() if meet_vanessa:pseen(1) then objs():add('vanessa_seeking') end end,
dsc = [[На полу кабинета лежит зелёный {parlor_rug:ковёр}, занимая всё видимое место. Напротив двери находится большое {parlor_window:окно}.Перед ним стоит письменный {parlor_table:стол}, за которым, скорее всего, сидел хозяин дома. Перед столом стоит удобный стул для гостей. Обе боковые стены заставлены книгами доверху. На потолке комнаты висит изысканная люстра с шестью свечами.]],
exit = function() if seen('vanessa_seeking') then objs():del('vanessa_seeking') end end,
obj = {
},
way = {'dining'}
}
backyard = room{
nam = "Задний двор",
dsc = [[К {house_back:дому} прилегает небольшой дворик, огороженный высоким {fence:забором}.]],
way = {'kitchen'}
}