Constant Story "Секрет звёздных глубин"; Constant Headline "^Демонстрационная интерактивная игра от No Time To Play^ Игра распространяется бесплатно, исходный код доступен под лицензией Artistic License 2.0^ Автор — Феликс Плешояну (Felix Pleşoianu). Перевод Алексея Галкина, 2023 год.^ Перевод выполнен с версии Release 2 / Serial number 202005^ Оригинальная версия игры и прохождение доступны на сайте https://felix.plesoianu.ro/.^^"; Release 1; Constant MAX_SCORE 25; Constant OBJECT_SCORE 5; Constant ROOM_SCORE 5; Include "Parser"; Include "VerbLib"; [Initialise; player.description = "На тебе лучшее снаряжение, которое только можно купить за деньги. (Не то, что бы ты знал как пользоваться и половиной из всего этого.., но тсс!) Жаль, что рядом нет никого, кто бы восхитился тобой."; thedark.description = "Дневной свет становится слабее по мере того как туннель, изгибаясь, удаляется от входа. Вскоре только эхо твоих собственных шагов остаётся единственным твоим спутником в темноте."; location = RightBank; lookmode = 2; "Так близко к шоссе и так далеко от цивилизации. И, кажется, никто об этом не знает. Долгие месяцы она насмехалась над тобой, но её секретам осталось храниться недолго. Ты готов.^"; ]; Object Trees "сосн/ы" with name 'сосн' 'дерев' 'лес' 'крон' 'гигант' 'зелен' 'иголк', description "Огромные, зелёные и молчаливые. Армия гигантов выгоняет тебя на открытое пространство.", found_in RightBank LeftBank Karst Roadside, before [; Examine: rfalse; Smell: "Такой приятный аромат."; default: "Того, что ты ищешь нет среди этих деревьев."; ], react_before [; Smell: "Ой! Иголки! Благоухание природы."; ], has pluralname scenery; Object River "рек/а" with name 'рек' 'русл' 'вод', description "Коварная. Такой выглядит вода. Не стоит демонстрировать смелость без подходящих инструментов.", found_in RightBank LeftBank, before [; Listen: "Звучит весело, бодро и к тому же булькает, но это не должно тебя обмануть."; Enter: "В холодную воду? Нет, спасибо."; ], react_before [; Swim: "В холодной воде? Нет, спасибо."; ] has scenery female; Object RightBank "Правый берег реки" with name 'берег', description "Сосны здесь расположены довольно далеко от берега, оставляя достаточно места для палатки. Широкое и глубокое русло делает воду довольно спокойной, несмотря на сильное течение. Прямо на северо-востоке вход в пещеру манит своими тайнами, а за палаткой на юге каменистая тропа уходит в лес.", s_to Trail, before [; Listen: if (noun == nothing) { "Немного нарушает тишину несмолкающая песня реки, теряющейся за деревьями."; } Look: if (self hasnt visited) { style underline; print "^(Исправлено во второй версии, благодаря любезности Перегрин Вэйд (Peregrine Wade) и Дэвида Велбурна (David Welbourn). Спасибо!)^"; style roman; } ], ne_to [; if (player in boat) return LeftBank; else "Плавать в холодной горной реке? Нет, спасибо."; ], cant_go "Заблудиться в лесу будет... контрпродуктивно.", has light; Object -> Trail "каменист/ая троп/а" with name 'камен' 'троп' 'дорог', door_to Roadside, door_dir s_to, has open scenery door; Object -> "вход/ в пещеру" with name 'cave' 'mouth' 'cavemouth', description "Так близко и так далеко.", before [; Examine: rfalse; default: "Увы, отсюда туда не добраться."; ] has scenery male; Object -> Tent "палатк/а" with name 'маленьк' 'крепк' 'ткан' 'палатк', description "Маленькая, но крепкая треугольная палатка из яркой ткани.", inside_description "В палатке хватает место лишь для спального мешка, да пары вещей. Но твой внедорожник всё равно припаркован неподалёку. В любом случае, это займёт день или два.", ! Avoid spoiling the mini-puzzle of finding the lantern. invent [; if (inventory_stage == 2) rtrue; ], before [; Take: "Нельзя уезжать без приза."; Search: give Lantern ~concealed; ], after [; Enter: give Lantern ~concealed; print "Ты пригинаешься и забираешься в палатку.^^"; print (string) self.inside_description, "^"; Locale(self, "Ты видишь", "Ты также замечаешь"); rtrue; ], has static enterable openable open container female; Object -> -> Lantern "фонарик/" with name 'электрическ' 'фонар' 'ламп' 'свет', initial "Твой сверхмощный электрический фонарь висит на крючке. ", description "Это сверхмощный электрический фонарь. Ты заменил батарейки только сегодня утром.", after [; SwitchOn: give self light; SwitchOff: give self ~light; ] has concealed switchable scored male; Object -> boat "надувн/ая лодк/а" with name 'надувн' 'резинов' 'лодк' 'весл', description "Это небольшая надувная лодка стоила тебе целое состояние. Но ничего, совсем скоро она себя окупит.", before [; Take: "Нельзя уезжать без приза."; Drive: "Здесь нет мотора. А хотелось бы."; Row: if (player notin self) { "Будет лучше, если сначала ты сядешь в лодку."; } else if (location == RightBank) { <>; } else if (location == LeftBank) { <>; } else { "Что-то идёт не так."; } Go: if (location == RightBank && noun == ne_obj) { print "Ты принялся энергично грести. Прежде чем ты успел об этом подумать лодка уже была на другом берегу.^"; return 1; } else if (location == RightBank && noun == s_obj) { print "Определённо, ты не сможешь грести на лодке по каменистой тропе.^"; return 2; } else if (location == LeftBank && noun == sw_obj) { print "Ты принялся энергично грести. Прежде чем ты успел об этом подумать лодка уже была на другом берегу.^"; return 1; } else if (location == LeftBank && noun == e_obj) { print "Определённо, ты не сможешь грести на лодке по грязной дороге.^"; return 2; } else { print "В лодке? Может лучше по реке?^"; return 2; } ] has enterable supporter female; Object LeftBank "Левый берег реки" with name 'влажн' 'земл' 'берег' 'троп', description "От берега на юго-западе рельеф резко поднимается, нигде не прерываясь, если не считать отверстия в склоне горы неподалёку. Узкая тропинка следует на восток по течению вдоль реки. С каждым шагом влажная земля проминается под ногами, а звук текущей воды эхом разносится во все стороны.", before [; Listen: if (noun == nothing) { "На этой стороне реки грохот от неё намного сильнее, так как звуковые волны отражаются от нависших поблизости скал."; } ], sw_to [; if (player in boat) return RightBank; else "Плыть в холодной горной реке? Нет, спасибо."; ], e_to Karst, n_to CaveMouth, cant_go "Заблудиться в горах было бы... контпродуктивно.", has light; Object -> CaveMouth "вход/ в пещеру" with name 'дыр' 'отверст' 'пещер' 'вход' 'рот' 'скал' 'ступен' 'гримас' 'врат', description "Наслоения скал, напоминающие сломанные ступени, ведут к тому, что вполне могло бы сойти за врата ада. В довершении ко всему, этот рот-отверстие с застывшей гримасой словно взывает к тебе.", door_to UpCave, door_dir n_to, before [; Climb: <>; ], has open scenery door male; Object Karst "Карстовый источник" with name 'вод' 'расщелин' 'гор' 'склон' 'бассейн' 'ветк' 'сеть' 'троп', description "Вода льётся сквозь расщелину в склоне горы и перед впадением в реку втекает в небольшой бассейн. Недалеко от тропы упавшие ветки образуют своеобразную сеть, в которой задерживается проплывающий мусор.", w_to LeftBank, cant_go "Тропа ведёт на запад.", has light; Object -> "рек/а" with name 'рек', description "Отсюда реки почти не видно.", before [; Examine: rfalse; default: "Слишком далеко."; ], has scenery female; Object -> Ball "теннисн/ый мяч/" with name 'теннис' 'мяч', initial "Теннисный мячик покачивается на воде среди веток.", description "Сырой, но в остальном, в хорошем состоянии.", before [; ThrowAt: if (second ~= Lake) "Осторожно! Кто знает чем это может закончиться!"; ], after [; Drop: print_ret "Теннисный мяч отскакивает от поверхности и почти укатывается прочь, но ты успеваешь вовремя его остановить."; ]; Object UpCave "Верхняя пещера" with name 'влажн' 'воздух' 'кож' 'стен', description "Дневной свет становится слабее по мере удаления от входа. Холодная влага прилипает к коже; стены влажно сияют в электрическом свете.^^ Ты забыл верёвку в машине, но здесь есть другая. Её конец уходит в темноту. Грубые ступени закручиваются спиралью вверх вокруг колоны в которой кто-то вырезал небольшую полку.", s_to LeftBank, out_to LeftBank, u_to CaveSteps, d_to RopeDown, before [; Listen: "Снизу доносится глухой рёв."; ], cant_go "Выход из пещеры — на юге."; Object -> Shelf "полк/а" with name 'вырезан' 'полк' 'столб' 'колон', capacity 1, has scenery supporter female; Object -> CaveSteps "грубы/е ступен/и" with name 'груб' 'ступен' 'лестниц', door_to Aerie, door_dir u_to, before [; Climb: <>; ], has open scenery door pluralname; Object -> RopeDown "веревк/а" with name 'веревк' 'канат' 'трос' 'резк', door_dir d_to, door_to [; if (Lantern in player) "С фонарём в руке тебе не спуститься по верёвке."; else if (Chest in player) "С сундуком в руке тебе не спуститься по верёвке."; else return LowCave; ], before [; Climb: <>; Take: "Надёжна закреплена и ещё нужна здесь."; ] has open scenery door female; Object Aerie "Вершина" with name 'стен' 'след' 'инструмент' 'дерев' 'осколк' 'свет' 'воздух', description "Это высокая и узкая комната, где каждая стена несёт след инструментов, а окаменелые осколки дерева хрустят под ногами. Высоко наверху сквозь трещины в скале пробиваются пучки дневного света; воздух здесь сухой, и не такой холодный как внизу в туннеле.", d_to UpCave, out_to UpCave, cant_go "Единственный выход отсюда — вниз.", has light; Object -> Mural "настенн/ая карт/а" with name 'настенн' 'карт' 'изображен' 'лини', initial "Выцветшее изображение украшает стену. Настенная карта.", description "Краска поблёкла, а линии нечёткие, но сомнений нет — это карта системы пещер. Ты находишь на ней входной туннель и эту комнату. На карте чётко обозначен проход из большого зала.", after [; Examine: if (NookPass has concealed) { give NookPass ~concealed; score = score + 5; } ] has static female; Object "звездн/ое не-неб/о" with name 'точк' 'неб' 'свет' 'высок' 'потол' 'обманчив' 'звезд', description "Это похоже на звёздное небо из твоего детства. Может тебе стоит остаться здесь, когда ты закончишь со всем этим?", found_in LowCave Nook, before [; Examine: rfalse; default: "Оно почти так же высоко как настоящее небо."; ], has scenery neuter; Object LowCave "Нижняя пещера" with name 'зуб' 'сталактит' 'сталагмит' 'выступ', description "Бесчисленные точки света усеивают высокий потолок пещеры, обрамляя зазубренные пики сталактитов и сталагмитов. Подземное озеро занимает большую часть комнаты, оставляя лишь узкий выступ на южной стороне. На востоке, вся эта вода шумно течёт по туннелю, а в обратном направлении лежит лабиринт запутанных проходов. Обращает на себя внимание верёвка, поднимающаяся вверх через отверстие.", u_to RopeUp, out_to RopeUp, nw_to [; if (NookPass has concealed) "Проходы в этом направлении кажутся более многообещающими, но ни один из них ничем не выделяется."; else return NookPass; ], cant_go "Избегая @<<водной могилы@>> на севере и востоке, ты исследуешь один или два прохода, но они, вероятно, должны вскоре замкнуться, либо уйти в темноту." has light scored; Object -> Lake "подземн/ое озер/о" with name 'подземн' 'озер' 'вод' 'туннел', description "Отрезвляющее проявление могущественных сил таится прямо под поверхностью.., по крайней мере, пока они не выйдут где-нибудь на дневной свет.", before [; Examine: rfalse; Enter: "Это станет трагическим концом твоей маленькой экспедиции."; ThrownAt, Receive: move noun to Karst; if (noun == Chest) score = score + 5; print_ret (CCNom) noun, " летит в темноту. Некоторое время спустя внизу раздаётся всплеск. Когда ты всматриваешься, то замечаешь тёмное пятно, плывущее на восток по течению. Но это, вероятно, игра твоего воображения."; default: "Озеро не настолько близко. К счастью."; ], react_before [; Jump, Swim: "Это станет трагическим концом твоей маленькой экспедиции."; Listen: "Пещеры должны отражать звуки капающей воды, а не этот оглушительный рёв."; ], has scenery neuter; Object -> RopeUp "веревк/а" with name 'веревк' 'дыр' 'трос' 'канат' 'отверсти', door_dir u_to, door_to [; if (Chest in player) "С сундуком тебе не подняться по верёвке."; else return UpCave; ], before [; Climb: <>; Take: "Надёжна закреплена и ещё нужна здесь."; ] has open scenery door female; Object -> Maze "лабиринт/ проходов" with name 'лабиринт' 'проход' 'маленьк', description "Вопрос в том, какой, потому что все они выглядят одинаково в обманчивом звёздном свете.", before [; Enter, Search: "Бросая вызов неизвестному, ты исследуешь один или два прохода, но они либо раньше соединяться, либо просто уйдут в темноту."; ], has scenery male; Object -> NookPass "скрыт/ый проход/" with name 'скрыт' 'проход', initial "При ближайшем рассмотрении оказывается, что один из боковых проходов ведёт не в темноту.", description [; if (self has concealed) "Вопрос в том, какой, потому что все они выглядят одинаково в обманчивом звёздном свете."; else "Он ведёт, примерно, на северо-запад, параллельно стене пещеры."; ], door_to Nook, door_dir nw_to has concealed open door male; Object Nook "Тайник" with name 'сломан' 'плит' 'скал' 'стен' 'камен' 'камн' 'вод' 'земл', description "Сломанные скальные плиты, прислонённые к стене и друг к другу скрывают нишу прямо у главной пещеры. Тут и там лужи замёрзшей воды на неровностях. Земля устрашающе мерцает, отражая фальшивые звёзды над головой.", se_to LowCave, out_to LowCave, cant_go "Главная пещера лежит на юго-востоке отсюда.", before [; Listen: "С юго-востока доносится глухой рев."; ], has light; Object -> Chest "сундук/ с сокровищами" with name 'сокровищ' 'сундук', description "Этот сундук с сокровищами словно из фильмов про пиратов. Хотя он меньше и легче, но несмотря на это, довольно крепкий.", before [; Open, Unlock: "У тебя ещё будет достаточно времени для этого."; ], has openable lockable locked scored male; Object Roadside "В стороне от шоссе" with name 'дорог' 'шоссе' 'шум' 'съезд' 'выхлоп' 'радио', description "Ты припарковал свой внедорожник недалеко от шоссе так, чтобы он не привлекал лишнего внимания. Редкий шум проносящихся мимо машин теряется в шуме ветра в кронах деревьев, однако запах выхлопных газов всё-таки долетает до тебя, примешиваясь к аромату хвои.", n_to RightBank, cant_go "Твой лагерь — на севере отсюда.", before [; Listen: "Ты выключил радио вскоре после того как приехал и ни разу не пожалел об этом."; ], has light; Object -> SUV "внедорожник/" with name 'машин' 'джип' 'авто' 'внедорожник' 'двер' 'багаж' 'тачк', description "Когда-то ты с гордостью называл её @<<тачкой@>>. Теперь это просто машина.", ! No need to advertise exactly how the car is implemented. invent [; if (inventory_stage == 2) rtrue; ], before [; Take, Drive: "Нельзя уезжать без приза."; ], after [; Receive: if (noun ~= Chest) rfalse; print "Ты отпираешь дверцу и собираешься спрятать свою находку в просторный багажник. Вскрытие может подождать. Когда ты поднимаешь голову, то понимаешь, что не один здесь...^^"; TheEnd(); rtrue; ], has static transparent enterable openable container male; [TheEnd; deadflag = 3; "@<<Позравляем!@>> — кричит смешно одетый мужчина, выбираясь из фургона. Ты не слышал как он подъехал. @<<Вы — первый победитель нашего нового реалити-шоу! Я бы предложил вам забрать ваш приз, но он уже у вас. Скажите, что вы чувствуете?@>> Женщина в деловом костюме, тоже стоящая здесь, смущённо улыбается. @<<Забыла предупредить, вас снимают.@>>"; ]; [DeathMessage; if (deadflag == 3) print "Всё вдруг приняло странный оборот..."; ]; [RowSub; "Вряд ли."; ]; [DriveSub; "Маловероятно."; ]; Include "RussiaG"; ! Include "Grammar"; Verb 'грести' * noun -> Row; Verb 'ехать' 'вести' * noun -> Drive * 'на'/'в' noun -> Drive * 'на'/'в' noun 'на' 'юг'/'дорогу'/'шоссе' -> Drive; Object "ехать" VerbDepot with name 'ехать' 'вести';