JavaScript is required. Please enable it to continue.
Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
/%<<link "vars">><<checkvars>><</link>> <<link "Благодарности">><<display "Info">><</link>> <<link "Dark Theme">><<DarkTheme>><</link>> <<link "Light Theme">><<LightTheme>><</link>> <<link "Garden Theme">><<GardenTheme>><</link>> <<link "In Darkness Theme">><<InDarknessTheme>><</link>>%/
<<script>> config.ui.stowBarInitially = true; /%config.debug = true;%/ config.cleanupWikifierOutput = true; $("#story-author").insertBefore("#story-title"); /*$("head").append("<link href='https://fonts.googleapis.com/css?family=Alegreya:400,400i,700&subset=cyrillic,latin-ext' rel='stylesheet'>");*/ /% подгрузка используемого шрифта %/ <</script>> <<display "Info">> <<display "Initialise">> <<set $_time = "present">> <<set $_face = 2>> <<Pronoun>> <<set $prevloc = "NULL">> <<set $loc = $Kung>> /%<<set $loc = $KungLast>>%/ <<set $Stage = "Stage1">> <<set $Theme = "DarkTheme">> <<set $MODE = "NULL">> <<set $circuit = true>> :: PassageDone [] /% Выполняется каждый ход %/ /%<<nobr>> <<replace "#story-title">> <<if turns() % 10 == 0>> <<= either ("Hic sunt trolles", "There be trolls", "Det kan være troll")>> <<else>> Здесь могут водиться тролли <</if>> <</replace>> <</nobr>> <<display $Stage>>%/
<<prepend "#menu-core">> <li id="menu-item-info"> <<link " Информация">> <<script>> Dialog.setup("Информация"); Dialog.wiki(Story.get("InfoContent").processText()); Dialog.open(); <</script>> <</link>> </li> <</prepend>>
Изначально «Откуда в Пустоши появились монстры» была написана на [[Парсерфест-2018|http://parserfest.ifiction.ru/]], проходивший с февраля по май 2018 года.<br> Решение переделать игру под принципиально другой интерфейс было принято сразу после завершения разработки первоначальной версии и весь процесс занял примерно столько же времени как оригинальная разработка.<br><br> Автор благодарит следующих людей, причастных к созданию игры и её адаптации: <ul> <li>Свою жену — за то, что позволяет заниматься таким затратным по времени хобби;</li> <li>Всеволода Зубарева — за поддержку и развитие Rinform;</li> <li>Юрия Павленко — за подсказки, здоровую конкуренцию, вклад в развитие IF;</li> <li>Александра Яковлева — за тестирование и здоровый скептицизм;</li> <li>Сергея Скибу — за Парсерфест-2018;</li> <li>Олега Алейникова и Ивана Нарожного — за прогулку по ночной Москве, сливовый портер и рассуждения, благодаря которым автор убедился, что игру дописывать нужно;</li> <li>Обитателей [[discord-каналов|https://discord.gg/X86kkzM]], посвящённых интерактивной литературе;</li> <li>Всех остальных, вольно или невольно влиявших и влияющих на творчество автора.</li> </ul> Свои отзывы и замечания высылайте по адресу [[
[email protected]
|mailto:
[email protected]
]]
/%<<replace "#story-author">> [[Вячеслав Добранов|http://cheshire.ifiction.ru/contacts/]] <</replace>>%/ /%<<goto "ScreenBuild">> УДАЛИТЬ!!!! %/ БАМ! Ты слышишь удар и спросонья чувствуешь как сотрясается ховер. Но окончательно изо сна тебя вырывает крик Дохо: «Му-у-уг!» <p class="Cutscene" style="text-align:center"><<linkreplace "">> <p style="text-align:left" class="animated fadeInDown">Ты дёргаешься, вываливаешься из койки на холодный ребристый пол, тяжело поднимаешься и, держась рукой за стенку, добираешься до кабины: «Дохо, ты чего орёшь?» — твой хриплый после сна голос едва слышен за писком сигнализации.</p> <<linkreplace "">> <p style="text-align:left" class="animated fadeInDown">«Они нас зацепили! Эти твари попали в контейнер!» — даже на его малоэмоциональном андроидном лице читается страх. «Кто они? Кто куда попал?»</p> <<linkreplace "">> <p style="text-align:left" class="animated fadeInDown">Он машет обеими клешнями на лобовые экраны перед собой: «Кочевники!» Ты бросаешь взгляд на верхний экран — и действительно, на схематичной панораме Пустоши ярко краснеют точки преследователей. Они догоняют.</p> <<linkreplace "">> <p style="text-align:left" class="animated fadeInDown">«Быстрее, Муг! Быстрее за пулемёт, пока… — он осекается и странно дёргается, пытается обернуться в сторону контейнера. — Ты чувствуешь?» Да, теперь ты тоже чувствуешь запах дыма. «العمى! Груз, Муг! Сперва спасай груз!» Ты выскакиваешь из кабины назад в кунг.</p> <<linkreplace "">> <<goto "Title">> <</linkreplace>> <</linkreplace>> <</linkreplace>> <</linkreplace>> <</linkreplace>> </p>
/% <p style="text-align:center;margin-top:40vh;font-size:2em">[[Откуда в Пустоши появились монстры|ScreenBuild]]</p>%/ <p class="Title-container"> <p class="Title font-effect-decaying"> Откуда в Пустоши появились монстры </p> <p class="Cutscene" style="text-align:center; font-family: inherit;"><<linkreplace "">> <<goto "ScreenBuild">> <</linkreplace>> </p> </p>
<<set $player.Parent = "Kung">> <<set $player.Bloodied = false>> <<set $player.Пулемёт = [1]>> /% где? %/ <<set $player.Питание = [1, 0, 0, 0]>> /% нехватка, где питание?, комбинация, отключил %/ <<set $player.Пожар = [0, 0, 0]>> /% пожар, чем тушить, потушил %/ <<set $player.Гробы = [0, 0]>> /% что в них?, не работают %/ <<set $player.Кочевники = [1, 0]>> /% много, далеко %/ <<set $player.Topics = ['Пулемёт', 'Питание', 'Пожар', 'Гробы', 'Кочевники']>>
<<set $Kung.Name = "В кунге">>
<<if $circuit>> <<object "Дверь" $fridgeDoor>> в холодильник <<if random(2)>> <<= ($fridgeDoor.Open ? "закрывается наполовину и снова открывается" : "со скрипом отъезжает в сторону")>>. <<set $fridgeDoor.Open = true>> <<else>> <<= ($fridgeDoor.Open ? "с лязгом закрывается" : "открывается наполовину и снова закрывается")>>. <<set $fridgeDoor.Open = false>> <</if>> <</if>>
<<if $prevloc.ID == $Cockpit.ID>> Ты выкарабкиваешься из кабины. <<elseif $prevloc.ID == $Fridge.ID>> Ты выходишь из контейнера и зябко вздрагиваешь. <</if>>
Тесный проход от кабины к контейнеру сжат с одной стороны двухэтажной <<object "койкой" $bed>>, с другой — <<object "системным шкафом" $closet>>. Через проём видно, как в кабине беснуется <<object "Дохо" $DohoKung>>. От его манёвров весь ховер болтает из стороны в сторону. <<if $circuit>> И что-то не так с питанием — <<prop "лампа" $lamp>> на потолке то загорается, то гаснет, а <<object "дверь" $fridgeDoor>> в контейнер-холодильник самопроизвольно открывается и закрывается. Надо срочно проверять питание./%<<object "системник" $closet>>.%/ <</if>>
<<if $prevloc.ID == $Cockpit.ID>> <<Go "Вернуться в кабину" $Cockpit>> <<else>> <<Go "Войти в кабину" $Cockpit>> <</if>> <<if $fridgeDoor.Open>> <<if $prevloc.ID == $Fridge.ID>> <<Go "Вернуться в контейнер" $Fridge>> <<else>> <<Go "Войти в контейнер" $Fridge>> <</if>> <<else>> <<if $prevloc.ID == $Fridge.ID>> <<NoActLoc "Вернуться в контейнер" "KungNoGo">> <<else>> <<NoActLoc "Войти в контейнер" "KungNoGo">> <</if>> <</if>>
Дверь опять закрылась. Нужно подождать пару секунд, когда она откроется, и проскользнуть.
<<set $bed.Name = "койка">> <<set $bed.NameG = "койки">> <<set $bed.NameD = "койке">> <<set $bed.NameA = "койку">> <<set $bed.NameI = "койкой">> <<set $bed.NameP = "койке">> <<set $bed.Parent = "Kung">>
Из двух спальных мест по назначению используется только нижнее. Верхняя койка организована под <<object "склад" $storage>> — к нему поднимается лесенка — в котором хранятся все необходимые при перегоне инструменты и припасы.
<<set $lamp.Name = "лампа">>
<<if $circuit>> Последняя целая лампа на потолке кунга, и в обычное время работавшая неважно, сейчас беспорядочно загорается и тухнет. Что-то совсем не так с питанием. <<else>> Теперь лампа светит ровным жёлтым светом. <</if>>
<<set $closet.Name = "системный шкаф">> <<set $closet.NameG = "системного шкафа">> <<set $closet.NameD = "системному шкафу">> <<set $closet.NameA = "системный шкаф">> <<set $closet.NameI = "системным шкафом">> <<set $closet.NameP = "системном шкафе">> <<set $closet.Parent = "Kung">> <<set $closet.Open = false>>
<<if !$closet.Open>> Шкаф закрыт противопыльной металлической шторой. <<else>> Одну половину шкафа занимает <<object "контрольная панель" $controlPanel>>, другую — <<object "место стрелка" $turretSeat>>. <</if>>
<<if !$closet.Open>> <<Act $closet "Поднять штору" "closetOpen">> <<else>> <<NoActOnce $closet "Закрыть системник" "closetClose">> <</if>>
<<set $closet.Open = true>>
Ты хватаешься за ручку у пола и рывком поднимаешь штору, открывая <<object "контрольную панель" $controlPanel>> и <<object "кресло стрелка" $turretSeat>>.
Только не в тот момент, когда за вами гонится банда безумных людоедов и их нужно как можно скорее отстрелить.
<<set $DohoKung.Name = "Дохо">> <<set $DohoKung.NameG = "Дохо">> <<set $DohoKung.NameD = "Дохо">> <<set $DohoKung.NameA = "Дохо">> <<set $DohoKung.NameI = "Дохо">> <<set $DohoKung.NameP = "Дохо">> <<set $DohoKung.Parent = "Kung">>
Мельтешенье рук, ругань, резкие манёвры. Похоже, андроид в панике. Похоже, дело худо.
<<StartTalk $DohoKung "Позвать Дохо">> <<NoAct $DohoKung "Прислушаться" "DohoKungListen">>
«Дохо!» — зовёшь ты в сторону кабины.<br> «Чего?» — доносится оттуда.
<<switch $Topic>> <<case "Пулемёт0">> <<set $question = "«Где у нас пулемёт?»">> <<set $answer = "«مص زبي, Муг!»<br>«Дохо, я ещё не совсем пришёл в себя…»<br>«Системный шкаф!»">> <<set $clockwork = "<<set $player.Пулемёт[0] = 2>>">> <<case "Питание0">> <<set $question = "«Похоже, с электропитанием непорядок».">> <<set $answer = "«Хорошо, что у нас есть механик на борту, да, Муг?»">> <<set $clockwork = "<<set $player.Питание[0] = 2>><<set $player.Питание[1] = 1>>">> <<case "Питание1">> <<set $question = "«Подскажи хотя бы с чего начать».">> <<set $answer = "«Ты что, головой ударился?»<br>«Возможно».<br>«Проверь контрольную панель в шкафу!»">> <<set $clockwork = "<<set $player.Питание[1] = 2>>">> <<case "Питание2">> <<set $question = "«Напомни комбинацию».">> <<set $answer = "«Влево-вправо-вправо!»">> <<case "Питание3">> <<set $question = "«Я исправил проблему с питанием».">> <<if $fire.Parent == "Fridge">> <<set $answer = "«Дым, Муг! Я же сказал, сначала разобраться с дымом! Груз важнее!»">> <<else>> <<set $answer = "«Ну так лезь быстрее за пулемёт!»">> <</if>> <<set $clockwork = "<<set $player.Питание[0] = 2>><<set $player.Питание[1] = 2>><<set $player.Питание[2] = 2>><<set $player.Питание[3] = 2>>">> <<case "Пожар0">> <<set $question = "«У нас пожар в холодильнике!»">> <<set $answer = "«Так какого чёрта ты его не тушишь!?»">> <<set $clockwork = "<<set $player.Пожар[0] = 2>><<set $player.Пожар[1] = 1>>">> <<case "Пожар1">> <<set $question = "«Чем мне его тушить?»">> <<set $answer = "«Проклятье, Муг! Огнетушителем, конечно же, ا ابن الشرموطة!»">> <<set $clockwork = "<<set $player.Пожар[1] = 2>>">> <<case "Пожар2">> <<set $question = "«Я потушил пожар».">> <<set $answer = "«Хочу напомнить — нас преследует свора отбитых дикарей, так что, если это тебя не затруднит, кончай трепаться и сядь, наконец, за чёртов пулемёт!»">> <<set $clockwork = "<<set $player.Пожар[0] = 2>><<set $player.Пожар[1] = 2>><<set $player.Пожар[2] = 2>>">> <<case "Гробы0">> <<set $question = "«Что в этих гробах?»">> <<set $answer = "«Тебе лучше не знать, Муг. И займись уже делом!»">> <<set $clockwork = "<<set $player.Гробы[0] = 2>>">> <<case "Гробы1">> <<set $question = "«Гробы теперь не работают, все индикаторы красные».">> <<set $answer = "«Это плохо, это очень плохо. Шевелись, Муг, нам нужно как можно скорее попасть в Цитадель!»">> <<set $clockwork = "<<set $player.Гробы[0] = 2>><<set $player.Гробы[1] = 2>>">> <<case "Кочевники0">> <<set $question = "«Много там Кочевников?»">> <<set $answer = "«Я столько ещё не видел! И они догоняют!»">> <<set $clockwork = "<<set $player.Кочевники[0] = 2>><<set $player.Кочевники[1] = 1>>">> <<case "Кочевники1">> <<set $question = "«Далеко они?»">> <<set $answer = "«Они почти догнали нас! Если не поторопишься, пулемёт нам уже не нужен будет!»">> <<default>> !!Ошибка!! <</switch>>
Из кабины доносится: <<= either("«العمى! العمى! العمى!»", "«Уйди! Уйди, гад!»", "«Всё нормально. Всё нормально. Всё будет норма… Твою мать!»", "«Ну что за день, что за дерьмовый день!»", "«يا ابن الشرموطة! Отстань!»", "«مص زبي!»", "«Ха-ха! Не попал! كل خرى, придурок!»")>>
<<set $fridgeDoor.Name = "дверь">> <<set $fridgeDoor.NameG = "двери">> <<set $fridgeDoor.NameD = "двери">> <<set $fridgeDoor.NameA = "дверь">> <<set $fridgeDoor.NameI = "дверью">> <<set $fridgeDoor.NameP = "двери">> <<set $fridgeDoor.Parent = "Kung">> <<set $fridgeDoor.Open = true>>
Дверь в <<= ($player.Parent == "Kung" ? "холодильник" : "кунг")>> <<= ($fridgeDoor.Open ? "открыта" : "закрыта")>>. <<if $player.Parent == "Kung" && $fridgeDoor.Open>> Сквозь неё ты видишь <<= $circuit ? "туманное" : "тёмное">> пространство холодильного контейнера. <<elseif $player.Parent == "Fridge" && $fridgeDoor.Open>> Сквозь неё ты видишь пространство кунга и проход в кабину с мелькающим там <<object "Дохо" $DohoKung>>. <</if>>
<<if !$fridgeDoor.Open>> <<NoActOnce $fridgeDoor "Открыть дверь" "fridgeDoorOpen">> <<elseif $circuit>> <<NoActOnce $fridgeDoor "Закрыть дверь" "fridgeDoorOpen">> <</if>>
Пока есть питание, дверь открывается и закрывается автоматически. Даже чересчур автоматически.
<<set $controlPanel.Name = "контрольная панель">> <<set $controlPanel.NameG = "контрольной панели">> <<set $controlPanel.NameD = "контрольной панели">> <<set $controlPanel.NameA = "контрольную панель">> <<set $controlPanel.NameI = "контрольной панелью">> <<set $controlPanel.NameP = "контрольной панели">> <<set $controlPanel.Parent = "Kung">> <<set $controlPanel.Trigger = "CUTSCENE">> <<set $controlPanel.CutsceneTimer = 0>>
<<if !$controlPanel.Examined>> <<if $circuit>> <<display "controlPanelCutscene">> <<else>> Ты быстро окидываешь взглядом мониторы диагностики. Да, нагрузка на батарею снижена — она переведена в малый контур. Ховеру теперь хватает питания, а у холодильника подключён лишь маглев. <</if>> <<else>> <<if $circuit>> На мониторах диагностики без изменений. Нужно переключать цепь на малый — внутренний — контур, отсекая холодильник от питания. Но сделать это можно только изнутри контейнера. <<else>> Мониторы показывают, что цепь питания переведена на малый контур — от батарей теперь питается только ховер, у холодильника же подключён только маглев. <</if>> <</if>>
<<if $circuit && $controlPanel.CutsceneTimer < 3>> <<Act $controlPanel "" "controlPanelCutscene">> <</if>>
<<set $controlPanel.CutsceneTimer++>> <<set $ACTLOG = false>> <<if $controlPanel.CutsceneTimer == 3>> <<set $MODE = "NULL">> <</if>>
<<switch $controlPanel.CutsceneTimer>> <<case 0>> Тебе хватает одного взгляда на мониторы диагностики, чтобы понять, насколько всё плохо. Большой контур, через который холодильник запитан к цепи ховера, оказался повреждён и теперь мешает работе остальных систем. Маглев, к счастью, подключен через свой собственный контур, но авария спалила одну из батарей, и остальные несут теперь повышенную нагрузку. Придётся отключать холодильник. <<case 1>> «Дохо! — кричишь ты в сторону кабины. — У нас проблемы!»<br> «Да неужели! Ты, наконец, заметил?»<br> «Дохо, нам придётся отключить холодильник!»<br> «Я тебе напомню, а то ты, наверное, забыл: если мы потеряем груз, в Цитадель лучше не возвращаться!»<br> «А если не отключить холодильник, мы потеряем маглев! Груз потом на себе потащишь!»<br> Из кабины доносится несколько приглушённых ругательств. Ховер сильно виляет в сторону, потом выправляется. <<case 2>> «Дохо, мне нужна комбинация!» — кричишь ты, потирая ушибленный бок.<br> «Влево, вправо, вправо! Давай быстрее, ты мне нужен за пулемётом!» <</switch>>
<<if $controlPanel.CutsceneTimer == 3>> <<set $ACTLOG = true>> <<set $player.Питание[2] = 1>> <</if>>
<<set $storage.Name = "склад">> <<set $storage.NameG = "склада">> <<set $storage.NameD = "складу">> <<set $storage.NameA = "склад">> <<set $storage.NameI = "складом">> <<set $storage.NameP = "складе">> <<set $storage.Parent = "Kung">>
Ты поднимаешься по лесенке на пару ступенек и прежде, чем спрыгнуть обратно, пробегаешь глазами по обвязанному содержимому склада: <<prop "вода" $water>>, <<prop "ящик с инструментами" $toolbox>>, <<if $fireExt.Parent == "storage">> <<object "огнетушитель" $fireExt>>, <</if>> <<prop "зерно" $grain>>.
<<set $water.Name = "вода">>
Пара металлических канистр с надписями «Питьевая» и «Техническая». Впрочем, надписи ничего не значат — вода в канистрах одна и та же.
<<set $toolbox.Name = "ящик с инструментами">>
Твой ненаглядный ящик с инструментами. Сейчас, как ни странно, без надобности.
<<set $grain.Name = "зерно">>
Несколько зашитых мешков с полбяной пшеницей. На каждом — клеймо южных анклавов.
<<set $fireExt.Name = "огнетушитель">> <<set $fireExt.NameG = "огнетушителя">> <<set $fireExt.NameD = "огнетушителю">> <<set $fireExt.NameA = "огнетушитель">> <<set $fireExt.NameI = "огнетушителем">> <<set $fireExt.NameP = "огнетушителе">> <<set $fireExt.Parent = "storage">> /%<<set $fireExt.Parent = "storage">>%/ <<set $fireExt.used = false>>
Здесь лежит <<object $fireExt.Name $fireExt>>.
<<if !$fireExt.used>> Готовый к употреблению огнетушитель. <<else>> С успехом использованный огнетушитель. <</if>>
<<Take $fireExt>> <<if $fireExt.Parent == "player" && !$fireExt.used>> <<InterAct $fireExt "Тушить…" "Опустить огнетушитель" "extinguishing">> <</if>> <<Drop $fireExt>>
Интересная мысль.
<<set $turretSeat.Name = "кресло стрелка">> <<set $turretSeat.NameG = "кресла стрелка">> <<set $turretSeat.NameD = "креслу стрелка">> <<set $turretSeat.NameA = "кресла стрелка">> <<set $turretSeat.NameI = "креслом стрелка">> <<set $turretSeat.NameP = "кресле стрелка">> <<set $turretSeat.Parent = "Kung">> <<set $turretSeat.CutsceneTimer = 0>>
Подвешенный на ремнях гамак-кресло и спускающийся сверху полый цилиндр визора с пультом управления на толстом проводе.
<<if $circuit>> <<NoAct $turretSeat "Забраться в кресло" "turretSeatSitFail">> <<else>> <<if $turretSeat.CutsceneTimer == 0>> <<Act $turretSeat "Забраться в кресло" "turretSeatCut">> /% отдельное действие, потому что для действий, содержащих «…Cutscene…» добавляется стрелка-вниз %/ <<elseif $turretSeat.CutsceneTimer < 2>> <<Act $turretSeat "" "turretSeatCutscene">> <</if>> <</if>>
Ты, не садясь в кресло, засовываешь голову в визор и щёлкаешь тумблером включения. Но, как и предполагалось, для работы турели тоже не хватает питания.
<<display "turretSeatCutsceneAct">>
<<display "turretSeatCutscene">>
<<set $turretSeat.CutsceneTimer++>> <<if $turretSeat.CutsceneTimer < 2>> <<set $MODE = "CUTSCENE">> <</if>>
<<switch $turretSeat.CutsceneTimer>> <<case 1>> «Дохо, я на пост!» — кричишь ты в сторону кабины<<= ($fireExt.Parent == "player" ? ", оставляешь у стены пустой огнетушитель" : "")>> и залезаешь в кресло. Натягиваешь визор, привычно зажмуриваешься прежде, чем щёлкнуть тумблером. <</switch>>
<<if $fireExt.Parent == "player">> <<removeobj $fireExt>> <</if>> <<if $turretSeat.CutsceneTimer == 2>> <<set $ACTLOG = false>> /%<<set $MODE = "NULL">>%/ <<set $prevloc = $Kung>> <<set $loc = $InsideTurret>> <<moveobj $player $InsideTurret>> <<set $Theme = "LightTheme">> <<LightTheme>> <<examlocrefresh>> <<set $InsideTurret.Visited++>> <</if>>
<<set $Cockpit.Name = "В кабине">>
Ты втискиваешься в кабину.
Из всего освещения в кабине — лишь разноцветное мельтешение на <<prop "лобовых экранах" $screens>>. <<object "Дохо" $DohoCockpit>>, вцепившийся в <<prop "рычаги" $levers>>, в таком свете ещё менее похож на человека. По бронированным стенкам змеятся переплетения <<prop "проводов" $cockpitCables>>, болтаются незакреплённые спайки и скрутки. С <<object "люка" $hatch>> в потолке свисает пара плюшевых игральных <<prop "костей" $dices>>, старых и грязных.
<<Go "Вернуться в кунг" $Kung>>
<<set $screens.Name = "лобовые экраны">>
Мельтешенье на экранах — это окружение ховера, представленное абстрактными моделями. На <<object "нижнем экране" $lowerScreen>> — передняя полусфера, на <<object "верхнем" $upperScreen>> — задняя.
<<set $upperScreen.Name = "верхний экран">> <<set $upperScreen.NameG = "верхнего экрана">> <<set $upperScreen.NameD = "верхнему экрану">> <<set $upperScreen.NameA = "верхний экран">> <<set $upperScreen.NameI = "верхним экраном">> <<set $upperScreen.NameP = "верхнем экране">> <<set $upperScreen.Parent = "Cockpit">>
На верхнем экране <<= ($lowerScreen.Examined && !$upperScreen.Examined ? "та же" : "мерцает")>> каркасная модель местности,<<= ($lowerScreen.Examined && !$upperScreen.Examined ? " только" : "")>> оставшейся позади ховера: в цифровую пустоту удаляются <<prop "высотные параллелепипеды" $screenWall>> справа, гладкая поверхность <<prop "Пустоши" $screenWasteland>> слева и лента <<prop "Трассы" $screenRoad>> посредине. А поверх всего — ярко-красные <<object "маркеры" $screenPursuers>> преследователей.
<<set $screenPursuers.Name = "преследователи">> <<set $screenPursuers.NameG = "преследователей">> <<set $screenPursuers.NameD = "преследователям">> <<set $screenPursuers.NameA = "преследователей">> <<set $screenPursuers.NameI = "преследователями">> <<set $screenPursuers.NameP = "преследователях">> <<set $screenPursuers.Parent = "upperScreen">>
Не меньше дюжины маркеров. Быстрые, юркие — это точно пустынные багги Кочевников. А значит, пользуются двигателями внутреннего сгорания и имеют преимущество перед маглев-ховером: им не нужна Трасса.
<<NoActOnce $screenPursuers "Вызвать меню с телеметрией" "screenPursuersTouch">>
«Вместо того, чтобы тыкать своими грязными пальцами мне в экран, сядь уже за пулемёт и разнеси этих ублюдков к чёртовой матери!» — окрикивает тебя Дохо.
<<set $lowerScreen.Name = "нижний экран">> <<set $lowerScreen.NameG = "нижнего экрана">> <<set $lowerScreen.NameD = "нижнему экрану">> <<set $lowerScreen.NameA = "нижний экран">> <<set $lowerScreen.NameI = "нижним экраном">> <<set $lowerScreen.NameP = "нижнем экране">> <<set $lowerScreen.Parent = "Cockpit">>
На нижнем — основном — экране <<= (!$lowerScreen.Examined && $upperScreen.Examined ? "та же" : "мерцает")>> каркасная модель местности,<<= (!$lowerScreen.Examined && $upperScreen.Examined ? " только" : "")>> отсканированная перед ховером. <<prop "Стена" $screenWall>> высотных параллелепипедов слева, гладкая поверхность <<prop "Пустоши" $screenWasteland>> справа и лента <<prop "Трассы" $screenRoad>> между ними. То и дело из цифровой пустоты возникают и несутся навстречу многоугольники <<prop "препятствий" $screenObstacles>>, но нечеловеческие рефлексы <<object "Дохо" $DohoCockpit>> вовремя уводят от них машину.
<<set $screenWall.Name = "стена небоскрёбов">>
В модели это всего лишь коробки, стоящие друг за другом, но ты помнишь вид этих чёрных зловещих небоскрёбов, сквозь которые просвечивает солнце.
<<set $screenWasteland.Name = "Пустошь">>
Модель не может передать и сотой доли того, что есть Пустошь. Её бесконечность, унылость, бесцветность, безжалостность, безжизненность… Впрочем, кое-кто чувствует себя там вполне комфортно, и их <<object "красные силуэты" $screenPursuers>> на верхнем экране подбираются всё ближе к ховеру.
<<set $screenRoad.Name = "Трасса">>
Чудо древней инженерной мысли, которое по прошествии сотен лет всё ещё способно генерировать минусовое магнитное поле, Трасса растянулась от анклавов на юге и до самой Цитадели на севере.
<<set $screenObstacles.Name = "препятствия">>
Модель не даёт понимания о том, что это за препятствия, лишь примерные габариты, однако, ты представляешь, что это может быть — в основном, древние остовы машин, усеявших Трассу, иногда — завалы от обрушенных зданий или круглые воронки там, куда падали бомбы.
<<set $DohoCockpit.Name = "Дохо">> <<set $DohoCockpit.NameG = "Дохо">> <<set $DohoCockpit.NameD = "Дохо">> <<set $DohoCockpit.NameA = "Дохо">> <<set $DohoCockpit.NameI = "Дохо">> <<set $DohoCockpit.NameP = "Дохо">> <<set $DohoCockpit.Parent = "Cockpit">>
Дохо — андроид. Физически он прикован к водительскому месту ховера, у него есть только пара рук да голова с барахлящим набором чувств. Но внутри оболочки находится самая нетерпимая, самая язвительная, самая сквернословящая личность из всех, кого ты знаешь.<br><br> «Муг! Какого чёрта ты стоишь тут и пялишься на меня?! Разве тебе не пора спасать наши задницы?!»
<<StartTalk $DohoCockpit "Говорить с Дохо">>
«Дохо», — обращаешься ты к андроиду.<br> «Чего?» — отзывается он.
<<display "DohoKungTalk">>
<<set $levers.Name = "рычаги">>
<<object "Дохо" $DohoCockpit>> активно дёргает эти рычаги, отчего ховер беспрестанно болтает из стороны в сторону.
<<set $cockpitCables.Name = "провода">>
Это твоя обязанность как инженера — следить за тем, чтобы всё работало и аккуратно выглядело. Времени хватает только на первое.
<<set $dices.Name = "кости">>
Это не твоё и уже тем более не Дохо. Когда и как здесь появились эти кости — великая загадка.
<<set $hatch.Name = "люк">> <<set $hatch.NameG = "люка">> <<set $hatch.NameD = "люку">> <<set $hatch.NameA = "люк">> <<set $hatch.NameI = "люком">> <<set $hatch.NameP = "люке">> <<set $hatch.Parent = "Cockpit">>
Единственный вход (и выход) в ховер.
<<NoActOnce $hatch "Открыть" "hatchOpen">>
Люк задраен, да и нет у тебя особого желания высовываться под прицелы Кочевников.
<<set $Fridge.Name = "В холодильном контейнере">>
<<if $circuit>> <<object "Дверь" $fridgeDoor>> в кунг <<if random(2)>> <<= ($fridgeDoor.Open ? "закрывается наполовину и снова открывается" : "со скрипом отъезжает в сторону")>>. <<set $fridgeDoor.Open = true>> <<else>> <<= ($fridgeDoor.Open ? "с лязгом закрывается" : "открывается наполовину и снова закрывается")>>. <<set $fridgeDoor.Open = false>> <</if>> <</if>>
<<if $player.Пожар[0] == 0>> <<set $player.Пожар[0] = 1>> <</if>> <<if $player.Гробы[0] == 0>> <<set $player.Гробы[0] = 1>> <</if>> Ты переступаешь порог контейнера и тут же покрываешься мурашками.
<<if $circuit>> Сквозь облачка пара от своего дыхания ты оглядываешь контейнер: узкий проход, по обеим сторонам которого — стеллажи с <<object "«гробами»" $coffins>>. Единственный выход — <<object "дверь" $fridgeDoor>> в кунг. <<if $fire.Parent == "Fridge">> Длинные <<prop "лампы" $lamps>> на потолке медленно обволакивает чёрным дымом. В дальнем конце прохода ты видишь его источник — языки <<object "пламени" $fire>>, поглотившие дальнюю стенку и несколько гробов. <<else>> Длинные <<prop "лампы" $lamps>> на потолке покрыты копотью. В дальнем конце прохода сыпет искрами мешанина обгорелых <<prop "кабелей" $cables>>. <</if>> <<else>> В холодильнике темно — свет из кунга падает недалеко <<if $fire.Parent == "Fridge">> , а <<object "огонь" $fire>>, поглощающий дальнюю стенку, слишком дымный, чтобы освещать <</if>> . Зато в темноте хорошо видна россыпь красных огоньков на <<object "гробах" $coffins>>. <</if>>
<<if $fridgeDoor.Open>> <<Go "Вернуться в кунг" $Kung>> <<else>> <<NoActLoc "Вернуться в кунг" "FridgeNoGo">> <</if>>
<<display "KungNoGo">>
<<set $switchboard.Name = "щиток управления">> <<set $switchboard.NameG = "щитка управления">> <<set $switchboard.NameD = "щитку управления">> <<set $switchboard.NameA = "щиток управления">> <<set $switchboard.NameI = "щитком управления">> <<set $switchboard.NameP = "щитке управления">> <<set $switchboard.Parent = "Fridge">>
<<if $circuit>> Слева от двери в кунг мигает красным восклицательным знаком <<object $switchboard.Name $switchboard>>. <</if>>
<<if $circuit>> Небольшой щиток, куда более современный и новый, чем громоздкая панель управления в кунге. В его нижней части выступает поворотная <<object "рукоятка" $handle>> — с помощью неё можно обойти блокировку и отключить питание в холодильнике. Если знать комбинацию.<br> На экранчике мигает красный восклицательный знак: сообщение о неполадках в системе. <<else>> В слабом свете, падающем из прохода в кунг, темнеет обесточенный щиток управления. <</if>>
<<NoActOnce $switchboard "Отключить" "switchboardTurnOff">> <<if $circuit && $handle.Examined>> <<Act $switchboard "Крутить рукоятку влево" "handleTurnLeft">> <<Act $switchboard "Крутить рукоятку вправо" "handleTurnRight">> <</if>>
К сожалению, просто так щиток не выключить — нужно в определённой последовательности крутить ручку влево-вправо.
<<set $handle.Name = "рукоятка">> <<set $handle.NameG = "рукоятки">> <<set $handle.NameD = "рукоятке">> <<set $handle.NameA = "рукоятку">> <<set $handle.NameI = "рукояткой">> <<set $handle.NameP = "рукоятке">> <<set $handle.Parent = "switchboard">> <<set $handle.t1 = 2>> <<set $handle.t2 = 3>> <<set $handle.t3 = 4>>
<<if $circuit>> Рукоятку можно крутить влево и вправо, и, если знать правильную комбинацию, отключить питание холодильника. <<else>> Рукоятка утоплена в щиток. <</if>>
<<if $circuit>> <<Act $handle "Крутить влево" "handleTurnLeft">> <<Act $handle "Крутить вправо" "handleTurnRight">> <</if>>
<<set $handle.s = 0>> <<display "handleTurningAct">>
<<display "handleTurningText">>
<<set $handle.s = 1>> <<display "handleTurningAct">>
<<display "handleTurningText">>
<<set $handle.t1 = $handle.t2>> <<set $handle.t2 = $handle.t3>> <<set $handle.t3 = $handle.s>> <<if $handle.t1 == 0 && $handle.t2 == 1 && $handle.t3 == 1>> <<set $circuit = false>> <<set $fridgeDoor.Open = true>> <<set $controlPanel.Trigger = "NULL">> <<set $player.Питание[2] = 2>> <<set $player.Питание[3] = 1>> <<set $player.Гробы[1] = 1>> <</if>>
Ты<<= $handle.t2 == $handle.s ? " ещё раз" : "">> поворачиваешь рукоятку на один оборот <<= $handle.s == 1 ? "вправо" : "влево">> <<if !$circuit>> и утапливаешь её до упора.<br><br> В следующую же секунду стихает низкий гул, который ты до этого даже не замечал, дверь застывает в открытом положении, а потолочные лампы мигают и гаснут. <<if $fire.Parent == "Fridge">> Дымный огонь, поглощающий заднюю стенку контейнера, даёт слишком мало света и холодильник <<else>> Холодильник <</if>> погружается в зябкую темноту. Ты видишь, как зелёные огоньки «гробов» поочерёдно сменяются на красные. <</if>>
<<set $fire.Name = "огонь">> <<set $fire.NameG = "огня">> <<set $fire.NameD = "огню">> <<set $fire.NameA = "огонь">> <<set $fire.NameI = "огнём">> <<set $fire.NameP = "огне">> <<set $fire.Parent = "Fridge">>
Пламя, зеленовато-жёлтое и дымное, пожирает заднюю стенку с ближними гробами и уже добирается до потолка.
<<NoAct $fire "Слушать звук пламени" "fireListen">> <<NoAct $fire "Вдохнуть запах" "fireSmell">>
Пламя урчит и трещит пожираемым пластиком.
Вонь горящего пластика.
<<removeobj $fire>> <<set $fireExt.used = true>> <<set $fireExt.Name = "пустой огнетушитель">> <<set $fireExt.NameG = "пустого огнетушителя">> <<set $fireExt.NameD = "пустому огнетушителю">> <<set $fireExt.NameA = "пустой огнетушитель">> <<set $fireExt.NameI = "пустым огнетушителем">> <<set $fireExt.NameP = "пустом огнетушителе">> <<set $player.Пожар[2] = 1>>
Ты пару раз стучишь огнетушителем об пол, потом направляешь раструб на пламя и сжимаешь рычаг. Струя молочно-белого морозного пара ударяется в огонь, обволакивает всю заднюю стенку и в считанные секунды от проблемы остаётся лишь шипенье. Ты даже удивлён, насколько всё оказалось просто. <<if $circuit>> <br><br>Когда туман оседает, ты видишь причину возгорания и источник проблем с питанием: мешанину искрящих <<prop "проводов" $cables>>, повреждённых, когда в ховер попал снаряд Кочевников. <</if>>
<<set $coffins.Name = "гробы">> <<set $coffins.NameG = "гробов">> <<set $coffins.NameD = "гробам">> <<set $coffins.NameA = "гробы">> <<set $coffins.NameI = "гробами">> <<set $coffins.NameP = "гробах">> <<set $coffins.Parent = "Fridge">>
Длинные узкие ящики из серебристого пластика расставлены на стеллажах по обеим сторонам от прохода. Ты не знаешь, что внутри них, да тебе и не очень хочется. Главное, эти «гробы» очень — очень! — важны для Цитадели. Именно из-за этого и срочность, и секретность, и особые температурные условия: в каждом «гробе» поддерживается очень низкая температура, о чём сообщают зелёные огоньки на них.<<= $circuit ? "" : " То есть теперь красные. Чёрт…">>
<<NoActOnce $coffins "Открыть их" "coffinsOpen">> <<NoActOnce $coffins "Коснуться их" "coffinsTouch">>
Это, возможно, смертельно опасно.
Ты прикасаешься кончиками пальцев к поверхности одного из гробов и тут же отдёргиваешь руку. Холодно, аж обжигает.
<<display "fireExtinguishAct">>
<<display "fireExtinguish">>
<<set $cables.Name = "кабели">>
Обгорелые кабели <<= $circuit ? "сыпят искрами" : "свисают по обугленной задней стенке">>.
<<set $lamps.Name = "лампы">>
<<if $circuit>> Эти лампы явно новее, чем та, последняя, в кунге. <<else>> В темноте ничего не видно, а <<= $fire.Parent == "Fridge" ? "света от дымного огня совсем недостаточно" : "свет из кунга падает недостаточно далеко">>. <</if>>
<<set $InsideTurret.Name = "Управляя турелью">> <<set $InsideTurret.Cutscene1Timer = 0>> <<set $InsideTurret.Cutscene2Timer = 0>> <<set $aimTimes = 0>> <<set $bikeCounter = 0>>
<<if ($hedgehog.Parent != "InsideTurret" || $trike.Parent != "InsideTurret" || $cabrio.Parent != "InsideTurret") && $bike.Parent != "InsideTurret">> <<moveobj $bike $InsideTurret>> Облако пыли и дыма ещё висит в воздухе, когда из-за него выскакивает ржавый <<object "байк" $bike>> и, обогнав <<if $hedgehog.Parent != "InsideTurret">> <<object "трайк" $trike>> с <<object "кабриолетом" $cabrio>> <<elseif $trike.Parent != "InsideTurret">> <<object "Дикобраза" $hedgehog>> с <<object "кабриолетом" $cabrio>> <<else>> <<object "Дикобраза" $hedgehog>> с <<object "трайком" $trike>> <</if>> , устремляется к ховеру. <<elseif ($hedgehog.Parent != "InsideTurret" || $trike.Parent != "InsideTurret" || $cabrio.Parent != "InsideTurret") && $bike.Hidden && $bikeCounter == 0>> <<set $bikeCounter++>> <<set $bike.Aimable = false>> <<if $aimed == $bike>> <<set $aimed = false>> <</if>> <<set $EXAMISACT = true>> /% с этого момента осмотр считается за ход %/ <<object "Байк" $bike>> тем временем подъезжает достаточно близко к холодильному контейнеру, чтобы скрыться из поля зрения камеры и турели. <<elseif $bike.Hidden && $bikeCounter < 3>> <<set $bikeCounter++>> <<elseif $bike.Hidden && $nomad.Parent != "InsideTurret" && $nomad.run == 0>> <<moveobj $nomad $InsideTurret>> <<set $savaimed = $aimed>> Вдруг над краем контейнера взлетает <<prop "«кошка»" $cat>>, падает на крышу и, проскользив по ней, цепляется за погрузочные петли. А ещё через минуту над краем показывается голова в мятом мотоциклетном шлеме.<br> <<object "Кочевник" $nomad>> карабкается на контейнер, достаёт из-за спины топорик и начинает рубить им обшивку. Изнутри ты слышишь глухие удары.<br> «Какого чёрта там происходит?» — доносится до тебя голос Дохо. <<elseif $nomad.Parent == "InsideTurret" && $nomad.run == 0 && $savaimed != $aimed>> <<set $nomad.run++>> <<object "Дикарь" $nomad>> замечает движение турели и резко поворачивается к ней с занесённым топором, но, осознав, что это перед ним, замирает в растерянности. <<elseif $nomad.Parent == "InsideTurret" && $nomad.run == 0 && $savaimed == $aimed && $aimed != false>> <<set $nomad.run = 2>> <<set $MODE = "CUTSCENE">> <<set $InsideTurret.Cutscene2Timer = 1>> От грохота стрельбы Кочевник вскидывается и бросается за борт контейнера.<br> «Кошка» дёргается и срывается, а потом ты видишь, каким неудачным оказался прыжок — опрокинутый байк лежит, зарывшись в песок, а рядом с ним — два распластанных тела. <<removeobj $nomad>> <<elseif $nomad.run == 1>> <<set $nomad.run++>> <<if $nomad.Parent == "InsideTurret">> Видя, что турель не стреляет в него, Кочевник разворачивается и бросается с контейнера вниз.<br> «Кошка» дёргается и срывается, а потом ты видишь, каким неудачным оказался прыжок — опрокинутый байк лежит, зарывшись в песок, а рядом с ним — два распластанных тела. <<removeobj $nomad>> <</if>> <<set $MODE = "CUTSCENE">> <<set $InsideTurret.Cutscene2Timer = 1>> <</if>>
<<set $ACTLOG = false>>
<<if !$InsideTurret.Visited>> Темнота за закрытыми веками расцвечивается яркими сполохами. Ты приоткрываешь глаза и, часто-часто моргая, оглядываешься. Камера где-то на крыше ховера чутко реагирует на твои движения и передаёт зернистую картинку: закат в Пустоши. <<else>> В визор ты наблюдаешь за обстановкой позади мчащего по <<prop "Трассе" $road>> <<prop "ховера" $hover>>: <<prop "контейнер" $fridgeOut>>, <<prop "закат" $dusk>>, <<object "небоскрёбы" $skyscrapers>>, чересполосица теней. И стая <<object "Кочевников" $buggies>>, за машинами которых тянутся длинные хвосты пыли.<br> <<if $hedgehog.Parent == "InsideTurret" && $trike.Parent == "InsideTurret" && $cabrio.Parent == "InsideTurret">> Ты следишь за несколькими <<object "багги" $buggies>>, ближе остальных подобравшихся к ховеру: ощетинившимся длинными ржавыми шипами <<object "«дикобразом»" $hedgehog>> и узким трёхколёсным <<object "трайком" $trike>>, ловко маневрирующим между препятствий. А чуть позади них сверкает начищенным металлом широкий <<object "кабриолет" $cabrio>>. <<elseif $hedgehog.Parent == "InsideTurret" || $trike.Parent == "InsideTurret" || $cabrio.Parent == "InsideTurret">> Ты следишь за <<object "багги" $buggies>>, оставшимися на передовой, — <<if $hedgehog.Parent != "InsideTurret">> <<object "трайком" $trike>> и <<object "кабриолетом" $cabrio>> <<elseif $trike.Parent != "InsideTurret">> <<object "Дикобразом" $hedgehog>> и <<object "кабриолетом" $cabrio>> <<else>> <<object "Дикобразом" $hedgehog>> и <<object "трайком" $trike>> <</if>> — и этими ловкачами на <<object "байке" $bike>>, которые подбираются всё ближе к ховеру. <</if>> <</if>>
<<if $InsideTurret.Cutscene1Timer < 2>> <<ActLoc "" "InsideTurretCutscene1">> <<elseif $InsideTurret.Cutscene2Timer > 0 && $InsideTurret.Cutscene2Timer < 5>> <<ActLoc "" "InsideTurretCutscene2">> <<else>> <<set $ACTLOG = true>> <<if $aimed>> <<set _a = $aimed.ID+"Shoot">> <<ActLoc "Стрелять" _a>> <<else>> <<NoActLoc "Стрелять" "InsideTurretShoot">> <</if>> <</if>>
<<set $InsideTurret.Cutscene1Timer++>> <<if $InsideTurret.Cutscene1Timer < 2>> <<set $MODE = "CUTSCENE">> <<elseif $InsideTurret.Cutscene1Timer == 2>> <<set $ACTLOG = false>> <<set $MODE = "NULL">> <<set $aimed = false>> <</if>>
<<switch $InsideTurret.Cutscene1Timer>> <<case 1>> /%<<LightTheme>> УДАЛИТЬ %/ Прямо перед твоим взглядом — бронированная корма <<prop "ховера" $hover>> с коротким жалом пулемётной <<prop "турели" $turret>>, за ней — ненастоящая ржавчина холодильного <<prop "контейнера" $fridgeOut>>, дымящего с дальнего конца, дальше — жёлто-красная лента <<prop "Трассы" $road>>, убегающая вдаль. На Трассу падают частые и длинные тени от обугленно-чёрных обелисков справа — бывших <<object "небоскрёбов" $skyscrapers>>. Пыльные лучи закатного <<prop "солнца" $dusk>> пронизывают их насквозь, делят Трассу на полосы яркого света и кромешной тьмы. <<case 2>> Но ты здесь не за красивыми видами. Ты уже отметил несколько <<object "багги" $buggies>>, мелькающих между обломками, которыми завалена <<prop "Трасса" $road>>. Пылевые следы, солнце, случайно блеснувшее в лобовом стекле, — тебе было бы сложно целиться в них самостоятельно, но умная камера заботливо развешивает каждому по ярлыку с телеметрией и тебе остаётся только зафиксировать на ком-нибудь взгляд и дать команду стрелять. <</switch>>
<<set $InsideTurret.Cutscene2Timer++>> <<if $InsideTurret.Cutscene2Timer < 5>> <<set $MODE = "CUTSCENE">> <<set $ACTLOG = false>> <<elseif $InsideTurret.Cutscene2Timer == 5>> <<set $ACTLOG = false>> <<set $aimed = false>> <</if>>
<<switch $InsideTurret.Cutscene2Timer>> <<case 2>> «Муг!» — зовёт из кабины Дохо.<br> «Чего?» — отзываешься ты, не снимая визора.<br> «Много там ещё этих الشرموطة?» <<case 3>> Ты окидываешь взглядом горизонт — пыльные тучи, блеск металла, марево выхлопных газов — и кричишь в ответ:<br> «На всех у нас патронов не хватит!»<br> «Есть идея, Муг. Мы скоро въедем в Сад, совсем немного осталось».<br> «И?»<br> «Помнишь, что там за конструкции поддерживают свод? На вид не очень крепкие, да?» <<case 4>> Ты пару секунд обдумываешь слова Дохо:<br> «Ты всерьёз предлагаешь обвалить свод Сада?»<br> «А есть выбор? Сколько ни отстреливайся, они рано или поздно нас догонят».<br> «Мы же так перекроем Трассу!»<br> «Уверен, в Цитадели найдётся, чем расчистить завалы. Но это потом, а нам с тобой спасаться нужно уже сейчас. Ну так как, согласен?»<br> Ты молчишь ещё пару секунд:<br> «Чёрт, наверное, ты прав. Выбора у нас нет».<br> «Вот и правильно! Я уже вижу купол Сада!» <</switch>>
<<if $InsideTurret.Cutscene2Timer == 5>> <<set $prevloc = $InsideTurret>> <<set $loc = $InsideTurret2>> <<moveobj $player $InsideTurret2>> <<moveobj $turret $InsideTurret2>> <<examlocrefresh>> <<GardenTheme>> <<set $InsideTurret2.Visited++>> <</if>>
Для начала нужно, чтобы пулемётная <<prop "турель" $turret>> во что-нибудь прицелилась.
<<widget "AimAt">> <<if $aimed != $args[0]>> <<if $args[0].hasOwnProperty('Aimable') && $args[0].Aimable>> <<set $aimed = $args[0]>> <<set $aimTimes++>> <<switch $aimTimes>> <<case 1>> (Ты фиксируешь взгляд на <<= $aimed.NameP>> и краем глаза отмечаешь, как жало <<prop "турели" $turret>> поворачивается в <<if $aimed.Sex == "M" || $aimed.Sex == "N">> его <<elseif $aimed.Sex == "F">> её <<else>> их <</if>> же сторону) <<case 2>> (Ты фиксируешь взгляд на <<= $aimed.NameP>> и <<prop "турель" $turret>> опять поворачивается в нужную сторону) <<case 3>> (Ты фиксируешь взгляд на <<= $aimed.NameP>> и <<prop "турель" $turret>> поворачивается в <<if $aimed.Sex == "M" || $aimed.Sex == "N">> его <<elseif $aimed.Sex == "F">> её <<else>> их <</if>> сторону) <<default>> (Турель наводится на <<= $aimed.NameA>>) <</switch>> <br><br> <<else>> <<if $aimed>> <<if Story.has($args[0].ID+"AimedTxt")>> <<set _AimedTxt = $args[0].ID+"AimedTxt">> <<display _AimedTxt>> <<else>> (Не найдя подходящую цель, <<prop "турель" $turret>> сбрасывает прицеливание c<<= ($aimed.NameG.charAt(0) == "с" ? "о" : "")>> <<object $aimed.NameG $aimed>> и возвращается в ждущий режим) <</if>> <br><br> <<set $aimed = false>> <</if>> <</if>> <</if>> <</widget>>
<<set $hover.Name = "ховер">>
<<AimAt $hover>> Корма ховера совершенно не изменилась с тех пор, как вы покинули южные анклавы.
<<set $turret.Name = "пулемётная турель">>
Автоматическая пулемётная турель с системой прицеливания, завязанной на камеры ховера. Стреляет чудовищным калибром 12,7 мм. Тобой — инженером-стрелком экипажа — любима и ненавидима в равной степени.<br><br> Над турелью висит ярлык с информацией о текущей цели: «<<if $aimed>><<set _l = $aimed.Name.toUpperFirst()>><<object _l $aimed>><<else>>Без целей<</if>>». /% В одну строчку, чтобы избавиться от лишних пробелов, например: « Без целей ». %/
<<set $fridgeOut.Name = "контейнер">>
<<AimAt $fridgeOut>> Крыша контейнера, как и вся остальная часть, маскирована нарисованной ржавчиной и потёками, чтобы не сильно выделяться в Пустоши своим новёхоньким видом. Там, куда попала ракета Кочевников, дымится оплавленная пробоина.
<<set $road.Name = "Трасса">>
<<AimAt $road>> Великая Трасса усеяна следами прошлого — обломками, древними остовами машин, воронками от снарядов. По её многострадальному полотну, расчерченному закатными лучами на полосы, мчится стая Кочевников. Их грубые шины терзают столетний бетон, поднимают облака пыли.
<<set $skyscrapers.Name = "небоскрёбы">> <<set $skyscrapers.NameG = "небоскрёбов">> <<set $skyscrapers.NameD = "небоскрёбам">> <<set $skyscrapers.NameA = "небоскрёбы">> <<set $skyscrapers.NameI = "небоскрёбами">> <<set $skyscrapers.NameP = "небоскрёбах">> <<set $skyscrapers.Sex = "P">> <<set $skyscrapers.Parent = "InsideTurret">> <<set $skyscrapers.Aimable = true>> <<set $skyscrapers.Shot = false>>
<<AimAt $skyscrapers>> Зловещие, чёрные памятники прошлого стеной подступают к самой Трассе. Сквозь их обугленные остовы просвечивает закатное солнце.
<<if $nomad.run == 1>> <<set $nomad.run++>> <<removeobj $nomad>> <<set $MODE = "CUTSCENE">> <<set $InsideTurret.Cutscene2Timer = 1>> <</if>>
<<if !$skyscrapers.Shot>> Ты жмёшь кнопку и турель выпускает очередь по ближайшему небоскрёбу. Ты успеваешь засомневаться, попала ли она, когда по чёрной поверхности прочерчивается пунктирная линия крошечных взрывов. <<else>> Ты снова выпускаешь очередь по одному из небоскрёбов. Взрывы на его поверхности появляются с той же заметной задержкой. <</if>> <<if $InsideTurret.Cutscene2Timer == 1>> <br><br> Видя, что турель не стреляет в него, Кочевник разворачивается и бросается с контейнера вниз.<br> «Кошка» дёргается и срывается, а потом ты видишь, каким неудачным оказался прыжок — опрокинутый байк лежит, зарывшись в песок, а рядом с ним — два распластанных тела. <</if>>
<<set $skyscrapers.Shot = true>>
<<set $dusk.Name = "солнце">>
<<AimAt $dusk>> Заходящее солнце окрашивает Пустошь в красные и оранжевые тона. Небо здесь — единственное, чем можно любоваться.
<<set $buggies.Name = "багги">> <<set $buggies.NameG = "багги">> <<set $buggies.NameD = "багги">> <<set $buggies.NameA = "багги">> <<set $buggies.NameI = "багги">> <<set $buggies.NameP = "багги">> <<set $buggies.Sex = "P">> <<set $buggies.Parent = "InsideTurret">>
(Пока ты оглядывешь всю стаю Кочевников целиком, <<prop "турель" $turret>>, сбросив прицеливание с<<= ($aimed.NameG.charAt(0) == "с" ? "о" : "")>> <<object $aimed.NameG $aimed>>, возвращается в ждущий режим)
<<AimAt $buggies>> <<if $hedgehog.Parent == "InsideTurret" && $trike.Parent == "InsideTurret" && $cabrio.Parent == "InsideTurret">> Преследователи многочислены и их пылевые следы закрывают горизонт, но ты выделяешь для себя нескольких, ближе всех подобравшихся к ховеру: ощетинившегося длинными ржавыми шипами <<object "«дикобраза»" $hedgehog>>, узкий трёхколёсный <<object "трайк" $trike>> и сверкающий начищенным металлом <<object "кабриолет" $cabrio>>. <<elseif $hedgehog.Parent == "InsideTurret" || $trike.Parent == "InsideTurret" || $cabrio.Parent == "InsideTurret">> Преследователи всё ещё многочислены, но ближе всего к ховеру остаются: <<if $hedgehog.Parent != "InsideTurret">> узкий трёхколёсный <<object "трайк" $trike>>, сверкающий начищенным металлом <<object "кабриолет" $cabrio>> <<elseif $trike.Parent != "InsideTurret">> ощетинившийся длинными ржавыми шипами <<object "Дикобраз" $hedgehog>>, сверкающий начищенным металлом <<object "кабриолет" $cabrio>> <<else>> ощетинившийся длинными ржавыми шипами <<object "Дикобраз" $hedgehog>>, узкий трёхколёсный <<object "трайк" $trike>> <</if>> и пара ловкачей на ржавом <<object "байке" $bike>>. <<else>> Основная масса преследователей ещё далека для эффективного огня турели, но ты уже присматриваешь следующие цели. <</if>>
<<set $hedgehog.Name = "Дикобраз">> <<set $hedgehog.NameG = "Дикобраза">> <<set $hedgehog.NameD = "Дикобразу">> <<set $hedgehog.NameA = "Дикобраза">> <<set $hedgehog.NameI = "Дикобразом">> <<set $hedgehog.NameP = "Дикобразе">> <<set $hedgehog.Parent = "InsideTurret">> <<set $hedgehog.Aimable = true>>
<<AimAt $hedgehog>> Этот багги весь покрыт длинными ржавыми шипами, торчащими назад и в стороны. Узкая полоска лобового стекла наверняка бронирована, но для турели это не помеха.
<<set $aimed = false>> <<removeobj $hedgehog>> <<if $trike.Parent != "InsideTurret" || $cabrio.Parent != "InsideTurret">> <<set $bike.Hidden = true>> <</if>>
<<if $trike.Parent == "InsideTurret" && $cabrio.Parent == "InsideTurret">> Ты нащупываешь кнопку огня и ещё до того, как понимаешь, что нажал её, турель выдаёт очередь из семи выстрелов. А ещё через секунду лобовое стекло Дикобраза забрызгивается изнутри красным, багги виляет в сторону, кренится на бок и срывается в серию разрушительных кувырков, долго расшвыривает части себя, пока, наконец, не замирает дымящимся куском металлолома. <<else>> Ты снова жмёшь кнопку огня и турель выдаёт ещё одну очередь. Через секунду лобовое стекло Дикобраза забрызгивается изнутри красным, багги виляет в сторону <<if $trike.Parent == "InsideTurret">> , врезается в трайк и обе машины отлетают прямо в большой кусок древнего бетона. Ты наблюдаешь, как от взрыва разлетаются дымящиеся куски металла, облака пыли, шипы, как одинокое колесо прыгает по Трассе и скатывается в обочину. <<else>> и врезается в кабриолет, насадив нескольких Кочевников на шипы. Однако, шестиколёсный вездеход лишь немного замедляется и продолжает нестись по Трассе, таща Дикобраза за собой. Но турель продолжает огонь. На блестящем капоте кабриолета появляются большие дыры и сразу же оттуда начинает валить чёрный дым, а потом вырывается пламя. Последовавший взрыв разносит и машину, и Кочевников в ней, и прицепившегося Дикобраза на куски. <</if>> <</if>>
<<if $trike.Parent != "InsideTurret">> <<removeobj $cabrio>> <<elseif $cabrio.Parent != "InsideTurret">> <<removeobj $trike>> <</if>>
<<set $trike.Name = "трайк">> <<set $trike.NameG = "трайка">> <<set $trike.NameD = "трайку">> <<set $trike.NameA = "трайк">> <<set $trike.NameI = "трайком">> <<set $trike.NameP = "трайке">> <<set $trike.Parent = "InsideTurret">> <<set $trike.Aimable = true>>
<<AimAt $trike>> Трёхколёсный багги, на вид не очень крепкий, но быстрый и манёвренный. На двух закрепленных сзади шестах болтаются длинные тряпки — слабая попытка обмануть систему прицеливания.
<<set $aimed = false>> <<removeobj $trike>> <<if $hedgehog.Parent != "InsideTurret" || $cabrio.Parent != "InsideTurret">> <<set $bike.Hidden = true>> <</if>>
<<if $hedgehog.Parent == "InsideTurret" && $cabrio.Parent == "InsideTurret">> Ты нащупываешь кнопку огня и ещё до того, как понимаешь, что нажал её, турель выдаёт очередь из семи выстрелов. А ещё через секунду тяжёлые пули начинают рвать трайк на куски. Покалеченный багги не успевает увернуться от большого куска бетона и на полной скорости влетает в него, взрываясь облаком пыли, обломков и крови. Ты наблюдаешь, как одинокое колесо прыгает по Трассе и скатывается в обочину. <<else>> Ты снова жмёшь кнопку огня и турель выдаёт ещё одну очередь. Через секунду тяжёлые пули начинают рвать трайк на куски. Покалеченный багги теряет управление <<if $hedgehog.Parent == "InsideTurret">> , налетает на Дикобраза, сбивает того с пути и обе машины отлетают прямо в большой кусок древнего бетона. Ты наблюдаешь, как от взрыва разлетаются дымящиеся куски металла, облака пыли, шипы, как одинокое колесо прыгает по Трассе и скатывается в обочину. <<else>> и наскакивает на кабриолет, придавив нескольких Кочевников. Однако, шестиколёсный вездеход лишь немного замедляется и продолжает нестись по Трассе, таща трайк на себе. Но турель продолжает огонь. На блестящем капоте кабриолета появляются большие дыры и сразу же оттуда начинает валить чёрный дым, а потом вырывается пламя. Последовавший взрыв разносит и машину, и Кочевников в ней, и прицепившийся трайк на куски. <</if>> <</if>>
<<if $hedgehog.Parent != "InsideTurret">> <<removeobj $cabrio>> <<elseif $cabrio.Parent != "InsideTurret">> <<removeobj $hedgehog>> <</if>>
<<set $cabrio.Name = "кабриолет">> <<set $cabrio.NameG = "кабриолета">> <<set $cabrio.NameD = "кабриолету">> <<set $cabrio.NameA = "кабриолет">> <<set $cabrio.NameI = "кабриолетом">> <<set $cabrio.NameP = "кабриолете">> <<set $cabrio.Parent = "InsideTurret">> <<set $cabrio.Aimable = true>>
<<AimAt $cabrio>> Приземистый шестиколёсный монстр скользит по неровностям Трассы и сверкает чистым металлом, если попадает в полосу света. Крыши нет и тебе видно, что в кабриолете — битком Кочевников. Они размахивают руками и потрясают оружием.
<<set $aimed = false>> <<removeobj $cabrio>> <<if $hedgehog.Parent != "InsideTurret" || $trike.Parent != "InsideTurret">> <<set $bike.Hidden = true>> <</if>>
<<if $hedgehog.Parent == "InsideTurret" && $trike.Parent == "InsideTurret">> Ты нащупываешь кнопку огня и ещё до того, как понимаешь, что нажал её, турель выдаёт очередь из семи выстрелов. А ещё через секунду в кабриолете воцаряется ад — крупный калибр прошивает людей насквозь, вышвыривает из машины, отрывает конечности. Турель продолжает огонь. На блестящем капоте кабриолета появляются большие дыры и сразу же оттуда начинает валить чёрный дым, а потом вырывается пламя. Последовавший взрыв разносит машину и оставшихся Кочевников на куски. <<else>> Ты снова жмёшь кнопку огня и турель выдаёт ещё одну очередь. И через секунду в кабриолете воцаряется ад — крупный калибр прошивает людей насквозь, вышвыривает из машины, отрывает конечности. Турель продолжает огонь. На блестящем капоте кабриолета появляются большие дыры и сразу же оттуда начинает валить чёрный дым, а потом вырывается пламя. <<if $hedgehog.Parent == "InsideTurret">> Последовавший взрыв разносит машину с оставшимися Кочевниками на куски и, перевернув Дикобраза, отшвыривает того за обочину. <<else>> Последовавший взрыв разносит машину и оставшихся Кочевников на куски, цепляет трайк, который, пытаясь увернуться от огня, на полной скорости влетает в большой кусок бетона. Ты наблюдаешь, как взметаются облака пыли, обломков, крови, как одинокое колесо прыгает по Трассе и скатывается в обочину. <</if>> <</if>>
<<if $hedgehog.Parent != "InsideTurret">> <<removeobj $trike>> <<elseif $trike.Parent != "InsideTurret">> <<removeobj $hedgehog>> <</if>>
<<set $bike.Name = "байк">> <<set $bike.NameG = "байка">> <<set $bike.NameD = "байку">> <<set $bike.NameA = "байк">> <<set $bike.NameI = "байком">> <<set $bike.NameP = "байке">> <<set $bike.Parent = "NULL">> <<set $bike.Aimable = true>> <<set $bike.Shot = false>> <<set $bike.Hidden = false>>
<<AimAt $bike>> <<if !$bike.Hidden>> Ржавый мотоцикл с вынесенным далеко назад задним колесом — чтобы сохранять устойчивость на песке. Верхом на нём двое кочевников: один рулит, другой, стоя на подножках и держась за плечо первого, раскручивает над головой «кошку». <<else>> Байк сейчас не видно, но он где-то рядом, вне поля твоего зрения. И это беспокоит. <</if>>
<<if !$bike.Shot>> Ты жмёшь кнопку огня и турель послушно отстреливает очередь в байк. Однако, тот ловко уворачивается от пуль и продолжает преследование. Стоящий Кочевник даже не сбивается с ритма, раскручивая «кошку». <<else>> Ты ещё раз пытаешься разобраться с байком, но результат тот же — Кочевник за рулём без проблем уворачивается от пуль и продолжает гнаться за ховером. <</if>>
<<set $bike.Shot = true>>
<<set $nomad.Name = "Кочевник">> <<set $nomad.NameG = "Кочевника">> <<set $nomad.NameD = "Кочевнику">> <<set $nomad.NameA = "Кочевника">> <<set $nomad.NameI = "Кочевником">> <<set $nomad.NameP = "Кочевнике">> <<set $nomad.Parent = "NULL">> <<set $nomad.Aimable = true>> <<set $nomad.run = 0>>
<<if $nomad.run == 0>> <<object "Кочевник" $nomad>> на крыше контейнера продолжает рубить обшивку. <</if>>
<<AimAt $nomad>> Ловкий и сильный дикарь, одетый в истлевшую мотоциклетную сбрую, без особого успеха рубит обшивку контейнера.
<<if $nomad.run == 1>> <<set $nomad.run++>> <<removeobj $nomad>> <<set $MODE = "CUTSCENE">> <<set $InsideTurret.Cutscene2Timer = 1>> <</if>>
Турель выплёвывает свой смертельный груз прямо в лицо Кочевнику, отрывая всё, до чего дотянулись пули, и вышвыривая уже безжизненные останки прочь с крыши контейнера.<br> «Кошка» дёргается и срывается, а потом ты видишь, куда упало тело — опрокинутый байк лежит, зарывшись в песок, а рядом с ним корчится второй Кочевник, весь в крови товарища.
<<set $cat.Name = "«кошка»">>
«Кошка» надёжно закрепилась на контейнере двумя крюками из четырёх.
<<set $InsideTurret2.Name = "Управляя турелью">> <<set $InsideTurret2.Cutscene1Timer = 0>> <<set $InsideTurret2.Cutscene2Timer = 0>>
<<set $EXAMISACT = false>>
<<if !$InsideTurret2.Visited>> Через некоторое время <<prop "Трасса" $road2>> приводит вас под свод Сада. Здесь сумрачно — солнце опустилось слишком низко и его лучи уже не попадают внутрь, лишь свет от вечернего неба льётся через сетчатое <<object "покрытие" $dome>> и хоть как-то разгоняет тьму.<br> «Проедем дальше, — слышится голос Дохо. — В середине конструкции сохранились хуже».<br> Ты не отвечаешь, только смотришь по сторонам. Когда-то под этим сводом жили люди — прям целое поселение, растянувшееся вдоль Трассы и закрытое сверху огромным прозрачным куполом. Теперь от него остались лишь вот эти чёрные развалины да сам сетчатый купол. А Садом это место называют из-за циклопических колонн, стоящих вдоль Трассы и поддерживающих конструкции далеко вверху. Говорят, они похожи на какие-то «деревя».<br> Ховер как раз тормозит у пары таких колонн, <<object "слева" $leftColumn>> и <<object "справа" $rightColumn>> от Трассы. <<else>> В визор ты рассматриваешь <<object "левую" $leftColumn>> и <<object "правую" $rightColumn>> колонны свода, выбирая в какой <<object "подкос" $branches>> стрелять. Небо над сетчатым <<object "куполом" $dome>> всё темнее, но мрак не мешает вашим <<object "преследователям" $buggies2>> продолжать погоню — на въезде в Сад ты видишь свет их фар и прожекторов. <</if>>
<<if $InsideTurret2.Cutscene1Timer < 1>> <<ActLoc "" "InsideTurret2Cutscene1">> <<elseif $InsideTurret2.Cutscene2Timer > 0 && $InsideTurret2.Cutscene2Timer < 5>> <<ActLoc "" "InsideTurret2Cutscene2">> <<else>> <<if $aimed>> <<set _a = $aimed.ID+"Shoot">> <<ActLoc "Стрелять" _a>> <<else>> <<NoActLoc "Стрелять" "InsideTurret2Shoot">> <</if>> <</if>>
<<set $InsideTurret2.Cutscene1Timer++>> <<if $InsideTurret2.Cutscene1Timer < 1>> <<set $MODE = "CUTSCENE">> <<elseif $InsideTurret2.Cutscene1Timer == 1>> <<set $ACTLOG = false>> <<set $MODE = "NULL">> <<set $aimed = false>> <</if>>
<<switch $InsideTurret2.Cutscene1Timer>> <<case 1>> «Вот, здесь. Давай, Муг, твой черёд».<br> Ты с сомнением смотришь на вздымающиеся ввысь столпы:<br> «Дохо, тут даже взрывчатка не поможет, куда уж нашей пятилинейке».<br> «Не туда смотришь. От верха каждой колонны должны отходить по несколько <<object "подкосов" $branches>>, которые держат покрытие вокруг, видишь такие?»<br> «Да, большинство уже разрушены».<br> «Вот. Разрушь оставшиеся и свод в это месте обвалится. И поторопись, <<object "Кочевники" $buggies2>> уже въехали в Сад!» <</switch>>
<<if $InsideTurret2.Cutscene1Timer == 1>> <<set $ACTLOG = true>> <</if>>
<<set $InsideTurret2.Cutscene2Timer++>> <<if $InsideTurret2.Cutscene2Timer == 2>> <<set $MODE = "CUTSCENE">> <<LightTheme>> <<set $ACTLOG = false>> <<elseif $InsideTurret2.Cutscene2Timer == 4>> <<DarkTheme>> <<elseif $InsideTurret2.Cutscene2Timer == 5>> <<set $ACTLOG = false>> <<set $MODE = "NULL">> <<set $aimed = false>> <</if>>
<<switch $InsideTurret2.Cutscene2Timer>> <<case 2>> Но когда вы выскакиваете из под свода и твои глаза опять привыкают к яркому свету закатного солнца, ты видишь, что ваши приключения ещё не закончились.<br> «Дохо! Засада!»<br> У выезда караулили несколько машин Кочевников, которые, завидев вас, поднимают тучи пыли и устремляются следом. В принципе, ничего такого, с чем бы не справилась ваша турель, однако беспокоит тебя не их количество.<br> «Кажется… Кажется у них ЭМИ!»<br> «Нестрашно, — отзывается Дохо. — Мы же экранированы со всех сторон!» <<case 3>> Ты наблюдаешь, как раскаляется обмотка ЭМИ-пушки, установленной на одном из багги Кочевников. Она вот-вот выстрелит.<br> Хорошо, что в корпусе ховера и контейнера проложен экранирующий слой, размышляешь ты, когда твой взгляд падает на пробоину от снаряда Кочевников. <<case 4>> Ты пытаешься позвать Дохо, но вдруг становится очень темно, на краткий миг возникает чувство невесомости, а потом ховер со всей силы бьётся брюхом о бетонную поверхность Трассы и долго по ней скрежещет, пока не останавливается совсем. Ты всхлипываешь. <</switch>>
<<if $InsideTurret2.Cutscene2Timer == 5>> <<set $prevloc = $InsideTurret2>> <<set $loc = $InsideDarkness>> <<moveobj $player $InsideDarkness>> <<InDarknessTheme>> <<examlocrefresh>> <<set $InsideDarkness.Visited++>> <<set $ACTLOG = true>> <</if>>
Для начала нужно, чтобы пулемётная <<prop "турель" $turret>> во что-нибудь прицелилась.
<<set $road2.Name = "Трасса">>
<<AimAt $road2>> Здесь Трасса стиснута подступающими с двух сторон чёрными развалинами и огромными колоннами, поддерживающими свод.
<<set $dome.Name = "свод">> <<set $dome.NameG = "свода">> <<set $dome.NameD = "своду">> <<set $dome.NameA = "свод">> <<set $dome.NameI = "сводом">> <<set $dome.NameP = "своде">> <<set $dome.Sex = "M">> <<set $dome.Parent = "InsideTurret2">> <<set $dome.Aimable = true>> <<set $dome.Shot = false>>
<<AimAt $dome>> В чёрной сетке древних конструкций много прорех, но свод каким-то образом ещё держится и, возможно, продержался бы ещё много лет.
<<if !$dome.Shot>> Турель выпускает очередь в сторону свода, но какого-то результата это не приносит — пули просто уходят в небо. Лишь несколько птиц снимаются с мест и улетают прочь. <<else>> Турель снова выпускает очередь по своду, но с тем же результатом — пули просто уходят в небо. <</if>>
<<set $dome.Shot = true>>
<<set $buggies2.Name = "Кочевники">> <<set $buggies2.NameG = "Кочевников">> <<set $buggies2.NameD = "Кочевникам">> <<set $buggies2.NameA = "Кочевников">> <<set $buggies2.NameI = "Кочевниками">> <<set $buggies2.NameP = "Кочевниках">> <<set $buggies2.Sex = "P">> <<set $buggies2.Parent = "InsideTurret2">>
(Кочевники ещё слишком далеко и <<prop "турель" $turret>>, сбросив прицеливание с<<= ($aimed.NameG.charAt(0) == "с" ? "о" : "")>> <<object $aimed.NameG $aimed>>, возвращается в ждущий режим)
<<AimAt $buggies2>> Здесь, во мраке Сада, ты не можешь различить отдельные багги, но оттого они кажутся ещё многочисленнее. Десятки лучей от фар и прожекторов рыщут по Трассе, пытаясь отыскать вас.
<<set $leftColumn.Name = "левая колонна">> <<set $leftColumn.NameG = "левой колонны">> <<set $leftColumn.NameD = "левой колонне">> <<set $leftColumn.NameA = "левую колонну">> <<set $leftColumn.NameI = "левой колонной">> <<set $leftColumn.NameP = "левой колонне">> <<set $leftColumn.Sex = "F">> <<set $leftColumn.Parent = "InsideTurret2">> <<set $leftColumn.Aimable = true>>
<<AimAt $leftColumn>> Огромная колонна из древнего бетона, возвышающаяся слева от Трассы, в верхней части разделяется на множество <<object "подкосов" $branches>>, из которых <<= ($branches.Num == 3 ? "целым остался только один" : "совсем не осталось целых")>>.
Турель выпускает очередь по телу колонны, но безрезультатно — на её поверхности просто добавляется несколько новых выбоин.
<<set $rightColumn.Name = "правая колонна">> <<set $rightColumn.NameG = "правой колонны">> <<set $rightColumn.NameD = "правой колонне">> <<set $rightColumn.NameA = "правую колонну">> <<set $rightColumn.NameI = "правой колонной">> <<set $rightColumn.NameP = "правой колонне">> <<set $rightColumn.Sex = "F">> <<set $rightColumn.Parent = "InsideTurret2">> <<set $rightColumn.Aimable = true>>
<<AimAt $rightColumn>> Огромная колонна из древнего бетона, возвышающаяся справа от Трассы, в верхней части разделяется на множество <<object "подкосов" $branches>>, из которых <<= ($branches.Num > 1 ? "целыми остаются только два" : ($branches.Num == 1 ? "целым остался только один" : "совсем не осталось целых"))>>.
<<display "leftColumnShoot">>
<<set $branches.Name = "подкосы">> <<set $branches.NameG = "подкосов">> <<set $branches.NameD = "подкосам">> <<set $branches.NameA = "подкосы">> <<set $branches.NameI = "подкосами">> <<set $branches.NameP = "подкосах">> <<set $branches.Sex = "P">> <<set $branches.Parent = "InsideTurret2">> <<set $branches.Num = 3>> <<set $branches.Aimable = true>>
<<AimAt $branches>> Длинные тонкие подкосы, поддерживающие сетчатый свод на участке вокруг каждой из колонн.
<<set $branches.Num-->> <<if $branches.Num == 0>> <<set $InsideTurret2.Cutscene2Timer = 1>> <<set $MODE = "CUTSCENE">> <</if>>
<<switch $branches.Num>> <<case 2>> Турель стреляет и один из подкосов — последний на левой колонне — с громким хлопком лопается посередине. Несколько секций свода со стоном проседают, но ещё держатся. <<case 1>> Турель опять стреляет по одному из подкосов и от правой колонны отваливается предпоследний. Ближний участок свода со стоном и скрежетом проваливается на несколько метров, но зависает на полпути к Трассе.<br> «Дохо, остаётся немного, будь готов!» <<case 0>> Турель стреляет по последнему подкосу на правой колонне и разрушение уже не остановить. Целый кусок свода ухает вниз, увлекая за собой соседние.<br> «Дохо, сваливаем!» — кричишь ты в кунг.<br> Ховер качается и срывается вперёд, а на место, где вы только что стояли, валятся всё новые и новые конструкции.<br> Покрытие всё падает и падает, проваливаются даже те участки, которые казались самыми устойчивыми. Позади мчащегося ховера ты наблюдаешь растущие завалы и клубы пыли.<br> «Вот чёрт…»<br> «Ничего, — отзывается Дохо. — Зато теперь им нас ни за что не догнать! Мы почти выехали из Сада!» <</switch>>
<<widget "GardenTheme">> <<removeclass "body">> <<addclass "body" "gardentheme">> <</widget>> <<widget "InDarknessTheme">> <<removeclass "body">> <<addclass "body" "indarknesstheme">> <</widget>>
<<set $InsideDarkness.Name = "В темноте">> <<set $InsideDarkness.Counter = 0>>
<<InDarknessTheme>>
<<if $InsideDarkness.Counter >= 0>> <<set $InsideDarkness.Counter++>> <<if $InsideDarkness.Counter == 3 && $visor.Parent != "player">> В темноте ты слышишь шёпот Дохо: «Да сними ты уже этот чёртов <<object "визор" $visor>>». <<moveobj $visor $player>> <</if>> <</if>>
Вокруг тебя — кромешная <<object "тьма" $darkness>>.
<<set $darkness.Name = "темнота">> <<set $darkness.NameG = "темноты">> <<set $darkness.NameD = "темноте">> <<set $darkness.NameA = "темноту">> <<set $darkness.NameI = "темнотой">> <<set $darkness.NameP = "темноте">> <<set $darkness.Sex = "F">> <<set $darkness.Parent = "InsideDarkness">>
Ты абсолютно ничего не видишь.
<<NoAct $darkness "Прислушаться" "darknessListen">> <<NoAct $darkness "Принюхаться" "darknessSmell">> <<if $InsideDarkness.Counter < 100>> <<Act $darkness "Позвать Дохо" "darknessCallDoho">> <</if>> <<Act $darkness "Ощупать себя" "darknessTouch">>
Тишина не абсолютна, но ты не понимаешь природу окружающих тебя звуков. Одно ты можешь сказать точно — ховер безнадёжно мёртв.
Ты чувствуешь скорбный запах спалённой электроники.
<<if $visor.Parent != "player">> <<moveobj $visor $player>> <</if>> <<set $InsideDarkness.Counter++>>
Ты поднимаешь руки к лицу и наталкиваешься на твёрдую поверхность <<object "визора" $visor>>.
<<if $visor.Parent != "player">> <<moveobj $visor $player>> <</if>> <<set $InsideDarkness.Counter += 100>>
«Эй, Дохо», — шепчешь ты в темноту.<br> <<if $InsideDarkness.Counter > 3 && $InsideDarkness.Counter < 103>> «Сними ты уже этот чёртов <<object "визор" $visor>>», — отвечает тот из темноты. <<elseif $InsideDarkness.Counter >= 103>> «Сначала <<object "визор" $visor>>, Муг. У нас мало времени». <</if>>
<<set $visor.Name = "визор">> <<set $visor.NameG = "визора">> <<set $visor.NameD = "визору">> <<set $visor.NameA = "визор">> <<set $visor.NameI = "визором">> <<set $visor.NameP = "визоре">> <<set $visor.Sex = "M">> <<set $visor.Parent = "NULL">>
Обесточенный визор всё ещё надет тебе на голову.
<<Act $visor "Снять визор" "visorTakeOff">>
<<set $ACTLOG = false>> <<set $prevloc = $InsideDarkness>> <<set $loc = $Kung2>> <<moveobj $player $Kung2>> <<removeobj $visor>> <<DarkTheme>> <<goto "ScreenBuild">>
<<set $Kung2.Name = "Кунг, во мраке">> <<set $Kung2.Counter = 0>>
<<set $ACTLOG = true>> <<set $EXAMISACT = true>> <<DarkTheme>>
<<if !$Kung2Talking>> <<set $Kung2Talking = true>> <<else>> <<switch random(5)>> <<case 1>> Из кабины доносится шёпот <<object "Дохо" $Kung2Doho>>: «Муг, ты теряешь время!» <<case 2>> Из кабины доносится шёпот <<object "Дохо" $Kung2Doho>>: <<switch $Kung2Doho.phase>> <<case 1>> «Быстрее, Муг. Блокируй дверь!» <<case 2>> «Быстрее, Муг. Прячься внизу!» <<case 3>> «Муг, штора!» <</switch>> <</switch>> <<if $fireExt2.Counter >= 0>> <<set $fireExt2.Counter++>> <<if $fireExt2.Counter == 5>> <br>В темноте ты натыкаешься на <<object $fireExt2.NameA $fireExt2>>. <</if>> <</if>> <</if>>
<<if $Kung2.Counter == 0>> Ты сдёргиваешь визор и выпрыгиваешь из кресла, однако, не сразу понимаешь, где находишься. И дело даже не в том, что в кунге царит мрак — оказывается, ховер ещё и перевернулся набок, когда упал на Трассу. Поэтому сейчас у тебя под ногами — <<object "койка" $bed2>> со <<object "складом" $storage2>>, а над головой — <<prop "кресло" $turretSeat2>> стрелка. <<object "Дверь" $fridgeDoor2>> в холодильник закрылась под собственным весом, а проём в кабину заблокирован <<object "панелью управления" $controlPanel2>>. Из-за которой опять слышен шёпот <<object "Дохо" $Kung2Doho>>:<br> «Муг, слушай меня внимательно. Если хочешь выжить, слушай очень внимательно! Сейчас первое, что ты должен сделать — это заблокировать дверь в контейнер. Сделай так, чтобы её нельзя было открыть изнутри». <<else>> Под ногами у тебя — <<object "койка" $bed2>> со <<object "складом" $storage2>>, а над головой — <<prop "кресло" $turretSeat2>> стрелка. <<object "Дверь" $fridgeDoor2>> в холодильник закрыта <<= ($fridgeDoor2.Locked ? " и расклинена огнетушителем" : "под собственным весом")>>, проём в кабину заблокирован <<object "панелью управления" $controlPanel2>>. <</if>> <<set $Kung2.Counter++>>
<<set $bed2.Name = "койка">> <<set $bed2.NameG = "койки">> <<set $bed2.NameD = "койке">> <<set $bed2.NameA = "койку">> <<set $bed2.NameI = "койкой">> <<set $bed2.NameP = "койке">> <<set $bed2.Sex = "F">> <<set $bed2.Parent = "Kung2">>
<<if $Kung2Doho.phase == 1>> Тёмная яма под ногами — твоя бывшая койка. Нужно быть аккуратнее, чтобы не упасть в неё. А рядом — набитый припасами <<object "склад" $storage2>>. <<elseif $Kung2Doho.phase == 2>> Дохо хочет, чтобы ты спрятался в этой койке и закрылся металлической шторкой. Причин не послушаться у тебя нет. <</if>>
<<if $Kung2Doho.phase == 2>> <<Go "Спрыгнуть в койку" $Hiding>> <</if>>
Там он не нужен.
<<set $storage2.Name = "склад">> <<set $storage2.NameG = "склада">> <<set $storage2.NameD = "складу">> <<set $storage2.NameA = "склад">> <<set $storage2.NameI = "складом">> <<set $storage2.NameP = "складе">> <<set $storage2.Sex = "M">> <<set $storage2.Parent = "Kung2">>
В темноте не видно, но ты и так знаешь, что там: <<prop "вода" $water2>>, <<prop "ящик" $toolbox2>> с инструментами, <<prop "мешки" $grain2>> с зерном. Только теперь всё вперемешку.
Там он не нужен.
<<set $water2.Name = "вода">>
Ты опускаешься на колени и шаришь в темноте рукой. Да, канистры на месте.
<<set $toolbox2.Name = "ящик с инструментами">>
Ты опускаешься на колени и шаришь в темноте рукой. Но ящика не находишь. Проклятье!
<<set $grain2.Name = "зерно">>
Ты опускаешься на колени и шаришь в темноте рукой. Похоже, один из мешков лопнул, но остальные целые.
<<set $turretSeat2.Name = "кресло стрелка">>
Гамак-кресло и визор теперь свисают с потолка.
<<set $fridgeDoor2.Name = "дверь">> <<set $fridgeDoor2.NameG = "двери">> <<set $fridgeDoor2.NameD = "двери">> <<set $fridgeDoor2.NameA = "дверь">> <<set $fridgeDoor2.NameI = "дверью">> <<set $fridgeDoor2.NameP = "двери">> <<set $fridgeDoor2.Sex = "F">> <<set $fridgeDoor2.Parent = "Kung2">> <<set $fridgeDoor2.Locked = false>>
<<if !$fridgeDoor2.Locked>> Дверь закрыта под собственным весом, но открыть её не составит труда при должном усилии. Но можно её расклинить, вставив что-нибудь между нею и стеной. <<else>> Дверь надёжно расклинена огнетушителем. Изнутри её точно не открыть. <</if>>
<<ActOnce $fridgeDoor2 "Открыть дверь" "fridgeDoor2Open">> <<NoActOnce $fridgeDoor2 "Закрыть дверь" "fridgeDoor2Close">>
<<set $Kung2Talking = false>>
«Не вздумай её открывать!» — слышишь ты яростный шёпот из кабины.
Она уже закрыта<<= (!$fridgeDoor2.Locked ? ". Осталось придумать, как её заблокировать." : " и заблокирована.")>>
<<moveobj $fireExt2 $fridgeDoor2>> <<set $fridgeDoor2.Locked = true>> <<set $MODE = "CUTSCENE">>
Ты аккуратно вставляешь огнетушитель между стеной и торцом двери, расклинив её. Теперь изнутри её точно не открыть.
<<set $ACTLOG = false>>
<<set $controlPanel2.Name = "контрольная панель">> <<set $controlPanel2.NameG = "контрольной панели">> <<set $controlPanel2.NameD = "контрольной панели">> <<set $controlPanel2.NameA = "контрольную панель">> <<set $controlPanel2.NameI = "контрольной панелью">> <<set $controlPanel2.NameP = "контрольной панели">> <<set $controlPanel2.Sex = "F">> <<set $controlPanel2.Parent = "Kung2">>
Контрольная панель вывалилась из системного шкафа и перекрыла вход в кабину и доступ к <<object "Дохо" $Kung2Doho>>. От неё исходит особенно сильный запах горелой электроники.
<<NoActOnce $controlPanel2 "Принюхаться" "controlPanel2Smell">>
Панель особенно сильно воняет горелой проводкой.
Эта идея не имеет смысла.
<<set $fireExt2.Name = "пустой огнетушитель">> <<set $fireExt2.NameG = "пустого огнетушителя">> <<set $fireExt2.NameD = "пустому огнетушителю">> <<set $fireExt2.NameA = "пустой огнетушитель">> <<set $fireExt2.NameI = "пустым огнетушителем">> <<set $fireExt2.NameP = "пустом огнетушителе">> <<set $fireExt2.Sex = "M">> <<set $fireExt2.Parent = "Kung2">> <<set $fireExt2.CutsceneTimer = 0>> <<set $fireExt2.Counter = 0>>
<<if $Kung2.Counter > 1>> Под ногами мешается <<object $fireExt2.Name $fireExt2>>. <<set $fireExt2.Counter = -100>> <</if>>
<<if !$fridgeDoor2.Locked>> Пустой огнетушитель, который ты использовал, когда тушил пожар в контейнере. <<else>> Пустой огнетушитель вставлен между стеной и дверью, надёжно блокируя её. <</if>>
<<if $MODE == "CUTSCENE">> <<if $fireExt2.CutsceneTimer == 0>> <<Act $fireExt2 "" "fireExt2Cutscene">> <<elseif $fireExt2.CutsceneTimer == 1>> <p style="display:flex;justify-content:center"> <span style="flex-grow:2;"></span> <span style="flex-grow:1;"><<Act $fireExt2 "Да" "fireExt2Yes">></span> <span style="flex-grow:1;"><<Act $fireExt2 "Нет" "fireExt2No">></span> <span style="flex-grow:2 ;"></span> </p> <<elseif $fireExt2.CutsceneTimer == 2>> <<Act $fireExt2 "" "fireExt2Cutscene2">> <</if>> <<else>> <<if $fireExt2.Parent != "fridgeDoor2">> <<Take $fireExt2>> <<Drop $fireExt2>> <</if>> <<if $fireExt2.Parent == "player">> <<InterAct $fireExt2 "Вставить в…" "Опустить огнетушитель" "inserting">> <</if>> <</if>>
Интересная мысль.
<<set $ACTLOG = false>> <<set $fireExt2.CutsceneTimer++>>
«Да, вот так. Так хорошо. То, что там в этих гробах… Там… Не стоило их размораживать…»<br> Дохо некоторое время медлит и продолжает:<br> «Муг, меня неслабо так зацепило импульсом, внутренняя батарея вот-вот сдохнет. Так что продолжай делать, что я скажу, и, возможно у тебя появится шанс выжить. Понял?»
<<set $fireExt2.CutsceneTimer++>> <<set $ACTLOG = true>>
«Хорошо. Очень хорошо. Кочевники прямо сейчас пытаются вскрыть люк в кабину, الشرموطة. Так что поторопись».
<<display "fireExt2YesAct">> <<set $ACTLOG = true>>
«Слушай, я понимаю, что у тебя, наверное, куча вопросов, но с моей батареей, с этими الشرموطة, которые прямо сейчас пытаются вскрыть люк в кабину, с тем, что мы везли в контейнере, — твой единственный шанс выжить — делать, что я скажу. Ты уж извини».
<<set $fireExt2.CutsceneTimer++>> <<set $MODE = "NULL">> <<set $ACTLOG = false>>
«Перво-наперво, спрячься внизу, в своей койке, и закрой шторку, там ты сможешь переждать какое-то время и, если будешь сидеть тихо, никто тебя не найдёт».
<<set $Kung2Doho.phase = 2>> <<set $ACTLOG = true>>
<<set $Kung2Doho.Name = "Дохо">> <<set $Kung2Doho.NameG = "Дохо">> <<set $Kung2Doho.NameD = "Дохо">> <<set $Kung2Doho.NameA = "Дохо">> <<set $Kung2Doho.NameI = "Дохо">> <<set $Kung2Doho.NameP = "Дохо">> <<set $Kung2Doho.Sex = "M">> <<set $Kung2Doho.Parent = "Kung2">> <<set $Kung2Doho.phase = 1>>
Дохо где-то в кабине, заблокированный панелью управления. Впрочем, это ещё вопрос — кто из вас на самом деле заблокирован.
<<Act $Kung2Doho "Говорить" "Kung2DohoTalk">>
<<set $Kung2Talking = false>>
<<switch $Kung2Doho.phase>> <<case 1>> «Не нужно вопросов, Муг! Делай, что я тебе говорю — блокируй дверь!» <<case 2>> «Муг, некогда разговаривать, прячься в койке!» <<case 3>> «Шторка, Муг, закрой её!» <<case 4>> Тебе хочется задать Дохо множество вопросов, однако, сейчас совсем неподходящее время. <</switch>>
Бессмыслица какая-то.
<<set $Hiding.Name = "Прячась в нише">> <<set $Hiding.Counter = 0>>
<<set $Kung2Doho.phase = 3>> <<set $EXAMISACT = true>>
<<if $Kung2Doho.phase < 4>> <<switch random(5)>> <<case 1>> Из кабины доносится шёпот <<object "Дохо" $Kung2Doho>>: «Муг, ты теряешь время!» <<case 2>> Из кабины доносится шёпот <<object "Дохо" $Kung2Doho>>: <<switch $Kung2Doho.phase>> <<case 1>> «Быстрее, Муг. Блокируй дверь!» <<case 2>> «Быстрее, Муг. Прячься внизу!» <<case 3>> «Муг, шторка!» <</switch>> <</switch>> <<else>> <<set $curtain.Counter++>> <<switch $curtain.Counter>> <<case 2>> «Мы с тобой не первый год катаем по Великой Трассе от южных анклавов до Цитадели. И грузы были самые разные, и приключений хватало, но мы с тобой неплохая команда, а? Да, поэтому-то нас и выбрали для этого перегона». <<case 3>> «Так исторически получилось, что анклавы сидят на месте крупных поселений Древних и время от времени откапывают там какие-нибудь новые технологии. Только самим разобраться у них ума не хватает, для этого нужна Цитадель. А расстояние между ними немаленькое. Вот мы и такие как мы гоняем туда-сюда со всякими непонятными грузами». <<case 4>> «Кочевники тоже понимают, что не просто так мимо них носятся гружённые ховеры, и по мере своих возможностей перехватывают. Рано или поздно им должен был попасться какой-нибудь очень ценный груз. Что, собственно, и случилось. Помнишь ведь историю с ноль-двенадцатым перегоном? Кому-то в Цитадели это очень не понравилось».<br><br> Тебе вдруг почудилось, что <<object "дверь" $doorHide>> в контейнер шевельнулась. <<case 5>> «العمى… — негромко ругается <<object "Дохо" $Kung2Doho>>. — Дикари упорствуют, боюсь, люк они вскроют быстрее, чем я ожидал. Времени совсем мало… Так вот. Кто-то в Цитадели решил положить конец проблеме с пропадающими ховерами. И они запросили у анклавов… Оружие». <<case 6>> «Да, выпросили у анклавов оружие Древних. Да не абы какое, а максимально автономное. Собственно, его мы и везли в этих гробах. В Цитадели хотели изучить экземпляры, изменить для своих целей и выпустить в Пустошь».<br><br> Вот опять. Ты почти уверен, что <<object "дверь" $doorHide>> двигалась. <<case 7>> «То есть, чтобы избавиться от нелюдей-каннибалов, они хотели приручить совсем уж каких-то адских тварей. Отличный план! Что могло пойти не так?»<br> <<object "Дохо" $Kung2Doho>> замолкает на пару секунд, а ты всё следишь за <<object "дверью" $doorHide>> в холодильник. Как она приподнимается и опускается.<br> «Кочевники почти вскрыли люк, Муг. Скоро будут здесь, в кабине… Слушай, у меня на затылке — разъём под иглу памяти. Если выживешь, прошу, сохрани её, доставь в Цитадель. Они там смогут восстановить меня. Прошу тебя как… Как друга, Муг». <<case 8>> Со стороны кабины ты слышишь громкий скрежет, возглас Дохо: «Грана…!» и тут же оглушительный хлопок. <<object "Дверь" $doorHide>> в холодильник замирает, больше не шевелится.<br> Через минуту в кабине слышны голоса:<br> «Schau, was wir hier haben. Ein Blechmann!»<br> «Ist er am leben?»<br> «Er war es nie». <<removeobj $Kung2Doho>> <<case 9>> По панели, перекрывающей вход в кабину, пару раз стучат.<br> «Komm, lass uns dieses Ding bewegen».<br> «Uff, es ist schwer». <<case 10>> После пары минут панель, наконец, отбрасывают к стене и в кунг попадает свет из кабины. Ты замечаешь несколько длинных бледных пальцев в щели приоткрытой <<object "двери" $doorHide>>, которые тут же отдёргиваются внутрь контейнера. Но пара вступивших в кунг <<prop "Кочевников" $nomadsHide>> ещё не привыкли к темноте, поэтому ничего не замечают:<br> «Dort. Die Tür». <<case 11>> <<set $MODE = "CUTSCENE">> <<set $focus = $NULL>> Один из непрошенных гостей подходит к двери в контейнер и со словами «Wofür ist das?» выдёргивает огнетушитель с места. <p class="Cutscene" style="text-align:center"><<linkreplace "">> <p style="text-align:left">И тут же в кунге разверзается ад: дверь распахивается и оттуда вырываются с десяток бледных визжащих тварей — сплошь когти и зубы. Они разрывают первого Кочевника, бросаются к другому, убивают того и с неестественной скоростью исчезают в кабине. Ты слышишь вопли и вой снаружи ховера, стрельбу, взрывы, но очень недолго. Ты лишаешься чувств.</p> <<linkreplace "">> <<set $prevloc = $Hiding>> <<set $loc = $Hiding2>> <<moveobj $player $Hiding2>> <<moveobj $curtain $Hiding2>> <<set $MODE = "NULL">> <<set $EXAMISACT = false>> <<examlocrefresh>> <<set $Hiding2.Visited++>> <</linkreplace>> <</linkreplace>> <</switch>> <</if>>
<<if $Hiding.Counter == 0>> <<set $Hiding.Counter++>> Ты спрыгиваешь в тёмную нишу, сгребаешь и раскладываешь всё тряпьё себе под спину и аккуратно ложишься.<br> «Теперь закрывай <<object "шторку" $curtain>>!» <<else>> Ты лежишь в нише, где располагалась твоя койка. Но сейчас ховер лежит на боку и, соответственно, ты лежишь не на мягком покрытии, а на ребристой стенке, подложив под себя кучу всякого <<prop "тряпья" $rags>>. <<if $curtain.Open == true>> Пространство кунга над тобой тонет во мраке и ты только угадываешь очертания <<object "двери" $doorHide>> в контейнер да <<object "панель" $panelHide>>, перекрывшую вход в кабину.<br> <<if $curtain.Found>> Где-то тут же выступает ручка <<object "шторки" $curtain>>. <<else>> <<set $curtain.Found = true>> В темноте ты нащупываешь ручку <<object "шторки" $curtain>>. <</if>> <<elseif $curtain.Counter >= 10>> И с ужасом следишь за происходящим в кунге, от которого тебя отделяет лишь тонкая металлическая <<object "шторка" $curtain>>. <<else>> Прямо перед твоим лицом — закрытая металлическая <<object "шторка" $curtain>>. Через маленькие отверстия в ней ты можешь видеть пространство кунга, впрочем, смотреть особо не на что: в кунге темно и ты только угадываешь очертания <<object "двери" $doorHide>> в контейнер да <<object "панель" $panelHide>>, перекрывшую вход в кабину. <</if>> <</if>>
<<set $curtain.Name = "металлическая шторка">> <<set $curtain.NameG = "металлической шторки">> <<set $curtain.NameD = "металлической шторке">> <<set $curtain.NameA = "металлическую шторку">> <<set $curtain.NameI = "металлической шторкой">> <<set $curtain.NameP = "металлической шторке">> <<set $curtain.Sex = "F">> <<set $curtain.Parent = "Hiding">> <<set $curtain.Open = true>> <<set $curtain.Found = false>> <<set $curtain.Counter = 0>>
<<if $curtain.Open == true>> Металлическая шторка, которой ты почти никогда не пользовался. <<else>> Закрытая металлическая шторка прямо перед твоим лицом покрыта маленькими вентиляционным отверстиями так, что ты можешь видеть пространство кунга. <</if>>
<<if $curtain.Open>> <<Act $curtain "Закрыть шторку" "curtainClose">> <<elseif $loc == $Hiding>> <<Act $curtain "Открыть шторку" "curtainOpen">> <<else>> <<Go "Открыть шторку" $KungLast>> <</if>>
<<set $curtain.Open = false>> <<set $Kung2Doho.phase = 4>>
Ты с натугой тянешь за ручку и плотно закрываешь шторку, отделяя себя от пространства кунга.<br><br> «А теперь лежи тихо-тихо. И пока у нас ещё есть время, я попробую успеть тебе кое-что рассказать».
Не сейчас. <<object "Дохо" $Kung2Doho>> бы просто так не советовал лежать здесь и не шевелиться.
<<set $rags.Name = "тряпьё">>
Просто одежда да всякое тряпьё, заменяющее тебе одеяло.
<<set $doorHide.Name = "дверь">> <<set $doorHide.NameG = "двери">> <<set $doorHide.NameD = "двери">> <<set $doorHide.NameA = "дверь">> <<set $doorHide.NameI = "дверью">> <<set $doorHide.NameP = "двери">> <<set $doorHide.Sex = "F">> <<set $doorHide.Parent = "Hiding">>
<<switch $curtain.Counter>> <<case 4>> Ты долго вглядываешься в контур двери, но ничего. Должно быть, и правда почудилось. <<case 6>> Ты смотришь на дверь не отрываясь. Когда ты уже решаешь, что тебе снова почудилось, она приподнимается на пару сантиметров и снова опускается. Кто-то пытается открыть её изнутри! <<case 7>> Дверь то поднимается, то опускается, но огнетушитель не даёт ей открыться больше, чем на пару сантиметров. <<case 8 9>> Дверь не шевелится. Что бы за ней ни было, оно выжидает. <<default>> <<if $curtain.Counter >= 10>> Дверь, за которой находится что-то невообразимо ужасное. <<else>> Светлый прямоугольник на фоне общего мрака. <</if>> <</switch>>
<<set $panelHide.Name = "контрольная панель">> <<set $panelHide.NameG = "контрольной панели">> <<set $panelHide.NameD = "контрольной панели">> <<set $panelHide.NameA = "контрольную панель">> <<set $panelHide.NameI = "контрольной панелью">> <<set $panelHide.NameP = "контрольной панели">> <<set $panelHide.Sex = "F">> <<set $panelHide.Parent = "Hiding">>
<<if $curtain.Counter >= 10>> Массивная панель, закрывавшая вход в кабину, а теперь сдвинутая в сторону. <<else>> Массивная панель, придавившая вход в кабину. <</if>>
<<set $nomadsHide.Name = "Кочевники">>
Двое дюжих Кочевников идут прямо навстречу своей гибели.
<<set $Hiding2.Name = "Прячась в нише">> <<set $Hiding2.first = true>>
<<if $Hiding2.first>> <<set $Hiding2.first = false>> <<set $player.Bloodied = true>> Ты приходишь в себя от того, что тебе на лицо что-то капает. <<else>> Ты всё ещё лежишь в спальной нише. Ты не знаешь, сколько пролежал без сознания, но вокруг тихо и тебе пора выбираться. В темноте ты нащупываешь ручку <<object "шторки" $curtain>>. <</if>>
<<set $KungLast.Name = "В кунге">>
Не без труда ты открываешь шторку и весь в крови Кочевников встаёшь из ниши.
Ты едва узнаёшь кунг — всё его пространство залито кровью. Стены, пол, потолок, <<prop "панель" $blood>> у входа в кабину, <<prop "шкаф" $blood>> над головой, <<prop "койка" $blood>>, <<prop "дверь" $blood>> в <<prop "холодильник" $fridgeLast>> — всё мокрое и липкое, и чёрное.<br> И запах. Удушающая вонь бойни от двух бесформенных <<prop "груд" $blood>> мяса на полу, бывших когда-то Кочевниками.<br> Тебе нужно скорее выбираться отсюда.
<<Go "В кабину" $CockpitLast>>
<<set $blood.Name = "столько крови">> <<set $blood.Counter = 0>>
<<set $blood.Counter++>> Ты ничего не хочешь видеть и изучать, ты хочешь как можно скорее выбраться отсюда. <<switch $blood.Counter>> <<case 1>> <<set $blood.Name = "как много крови">> <<case 2>> <<set $blood.Name = "почему так много крови">> <<case 3>> <<set $blood.Name = "кровь-кровь-кровь">> <<case 4>> <<set $blood.Name = "кровь">> <</switch>>
<<set $fridgeLast.Name = "холодильник">>
В чёрном проёме тускнеют красные огоньки пустых гробов. Лучше бы эта дверь оставалась закрытой.
<<set $CockpitLast.Name = "В кабине">> <<set $CockpitLast.Counter = 0>>
Ты переступаешь через мёртвых Кочевников и протискиваешься мимо панели в кабину.
Здесь тоже всё разрушено. <<prop "Экраны" $screensLast>> разбиты, тлеют обугленные игральные <<prop "кости" $dicesLast>>. <<prop "Люк" $hatchLast>> сорван и из него веет прохладой. Тебе срочно нужно наружу.
<<if $hatchLast.Examined > 0>> <<Go "Вылезти в люк" $NearHover>> <</if>>
<<set $DohoHead.Name = "голова Дохо">> <<set $DohoHead.NameG = "головы Дохо">> <<set $DohoHead.NameD = "голове Дохо">> <<set $DohoHead.NameA = "голову Дохо">> <<set $DohoHead.NameI = "головой Дохо">> <<set $DohoHead.NameP = "голове Дохо">> <<set $DohoHead.Sex = "F">> <<set $DohoHead.Parent = "CockpitLast">> <<set $DohoHead.Counter = 0>>
<<if $loc == $CockpitLast>> <<if $DohoHead.Counter == 0>> <<set $DohoHead.Counter++>> В углу ты замечаешь оторванную <<object "голову" $DohoHead>> Дохо. <<else>> В углу лежит оторванная <<object "голова" $DohoHead>> Дохо. <</if>> <<else>> На земле рядом с багги лежит <<object "голова" $DohoHead>> Дохо. <</if>>
Его голова — вот и всё, что осталось от твоего товарища.
<<Take $DohoHead>>
Ты бережно поднимаешь голову Дохо.
<<set $screensLast.Name = "экраны">>
Ты ничего не хочешь видеть и изучать, ты хочешь как можно скорее выбраться отсюда.
<<set $dicesLast.Name = "игральные кости">>
Ты ничего не хочешь видеть и изучать, ты хочешь как можно скорее выбраться отсюда.
<<set $hatchLast.Name = "люк">>
Сквозь люк ты видишь ночную Пустошь.
<<set $NearHover.Name = "У ховера">> <<set $NearHover.Counter = 0>>
<<if $prevloc.ID == $CockpitLast.ID>> <<if $DohoHead.Parent == "player">> Ты перехватываешь голову Дохо и лезешь в люк. <<else>> <<moveobj $DohoHead $player>> Ты бережно поднимаешь голову Дохо и лезешь в люк. <</if>> <br> Первое, что ты делаешь, выбравшись на свежий воздух, — долго и мучительно блюёшь, опершись о стенку ховера.<br> Наконец, выпрямляешься и осматриваешься. <<else>> Ты возвращаешься к верхней части ховера. <</if>>
<<if $NearBuggy.Preengine>> В окружающей тишине стрёкот пускового двигателя кажется особенно громким. Ты нервно озираешься. <<set $NearBuggy.Counter++>> <</if>>
<<if $NearHover.Visited == 1>> Уже <<prop "ночь" $night>>. <<else>> <<prop "Ночь" $night>>. <</if>> <<prop "Ховер" $hoverOut>> лежит на боку на обочине Трассы, а вокруг него — <<prop "тела" $bodies>> Кочевников. <<= $NearHover.Visited == 1 ? "Не все целиком. Ты снова чувствуешь рвотный позыв, но справляешься. " : "">>Неизвестно, где сейчас те твари, поэтому нужно скорее убираться отсюда.
<<if $hoverOut.Examined>> <<Go "Обойти ховер" $NearHoverBack>> <</if>>
<<set $hoverOut.Name = "ховер">>
Могучая машина, в которой ты провёл немалую часть своей жизни, беспомощно лежит на боку. Ховер уже никогда никуда не поедет. За контейнером тянется длинная борозда, пропаханная в бетоне Трассы.<br> Круглый зев <<prop "люка" $hatchOut>> чернеет на крыше ховера, осеребрённой <<prop "лунным светом" $night>>.
<<set $night.Name = "ночь">>
Свет большой круглой луны разливается по Трассе, по Пустоши, по древним развалинам, обесцвечивая всё вокруг, подменяя ржавую палитру песка всеми оттенками серебра и чернильными тенями.
<<set $bodies.Name = "тела">>
Вокруг перевёрнутого <<prop "ховера" $hoverOut>> лежат с десяток тел. На серебристом бетоне Трассы растекаются чёрные лужи их крови.
<<set $hatchOut.Name = "люк">>
Люк в ховер, всегда обещавший спокойствие и безопасность, сейчас вызывает только страх и отвращение. <<if $player.Bloodied>> <<set $player.Bloodied = false>> Ты вдруг бросаешься оттирать с одежды кровь, в которой испачкался, когда выбирался из кунга. <</if>>
<<set $NearHoverBack.Name = "У нижней части ховера">> <<set $NearHoverBack.General = false>>
<<if !$NearHoverBack.General>> <<set $NearHoverBack.General = true>> Ты обходишь ховер кругом и… Вот оно. <<elseif $DohoHead.Parent != "NULL">> Ты <<= $DohoHead.Parent != "player" ? "подбираешь с земли голову Дохо и " : "">>возвращаешься к нижней части ховера. <<moveobj $DohoHead $player>> <<else>> Ты возвращаешься к нижней части ховера. <</if>>
<<if $NearBuggy.Preengine>> От багги разносится громкий стрёкот пускового двигателя. <<set $NearBuggy.Counter++>> <</if>>
Ты <<= $NearHoverBack.Visited == 1 ? "останавливаешься" : "стоишь">> у нижней стороны <<prop "ховера" $lowerHover>> и <<= $NearHoverBack.Visited == 1 ? "видишь" : "смотришь на">> брошенный <<prop "багги" $theBuggy>> Кочевников, съехавший одним колесом в кювет.
<<Go "Подойти к багги" $NearBuggy>> <<Go "Обойти ховер" $NearHover>>
<<set $lowerHover.Name = "ховер">>
Нижняя часть машины, на которой белеют круглые пластины магнитов. Сколько времени ты провёл под ними, то и дело отрывая от них свои инструменты. Больше не проведёшь.
<<set $theBuggy.Name = "багги">>
<<if $NearBuggy.Visited>> Отлично подготовленный для путешествия по Пустоши багги. То, что нужно, чтобы добраться до Цитадели. <<else>> Отсюда багги выглядит неповреждённым, просто неудачно съехал в кювет. Нужно рассмотреть поближе. <</if>>
<<set $NearBuggy.Name = "У багги">> <<set $NearBuggy.General = false>> <<set $NearBuggy.Preengine = false>> <<set $NearBuggy.Counter = 0>>
<<if !$NearBuggy.General>> <<set $NearBuggy.General = true>> Ты с опаской приближаешься к машине. <<else>> Ты подходишь к машине. <</if>>
<<if $NearBuggy.Preengine>> <<switch $NearBuggy.Counter>> <<case 0>> Громкий стрёкот пускача разносится далеко по округе и от этого весьма неуютно. <<case 1>> Пускач всё стрекочет. Поверх багги ты смотришь на затаившуюся серебристую Пустошь. <<case 2>> Громкость стрёкота повышается на пару секунд и, когда ты уже решаешь, что что-то не в порядке, становится прежней. Скорей бы. <<case 3>> Ты, наконец, сдаёшься и решаешь, что пускач достаточно прогрелся. <<default>> Пускач прогрелся. Нужно запускать основной двигатель и сваливать уже отсюда. <</switch>> <<set $NearBuggy.Counter++>> <</if>>
Этот багги — не более чем наспех сваренная рама из труб, поставленная на четыре колёса. С установленным сзади очень мощным движком. Впрочем, от пустынного вездехода большего и не требуется.
<<if !$NearBuggyStartEngine_seen>> <<if $NearBuggyEngine_seen>> <<ActLocOnce "Попробовать завести двигатель" "NearBuggyStartPreEngine">> <</if>> <<if $NearBuggy.Counter > 3>> <<ActLocOnce "Запустить основной двигатель" "NearBuggyStartEngine">> <</if>> <<ActLocOnce "Проверить раму" "NearBuggyChasis">> <<if $NearBuggyChasis_seen>> <<ActLocOnce "Проверить салон" "NearBuggyInterior">> <</if>> <<ActLocOnce "Проверить колёса" "NearBuggyWheels">> <<ActLocOnce "Проверить двигатель" "NearBuggyEngine">> <<Go "Вернуться к ховеру" $NearHoverBack>> <<else>> <<if $NearBuggy.Counter == 0>> <<ActLocOnce "Сесть в багги" "NearBuggyFinish">> <<elseif $NearBuggy.Counter < 4>> <<ActLoc "" "NearBuggyCutscene">> <</if>> <</if>>
Ты <<= $DohoHead.Parent == "player" ? "кладёшь голову Дохо на землю, " : "">>берёшься обеими руками за ближайшую трубу и несколько раз сильно дёргаешь, с удовлетворением отмечая, как рама целиком качается на амортизаторных пружинах. Проверяешь с другой стороны. Да, добротная работа, рама крепкая и надёжная — внутри такой нестрашно и перевернуться.
<<if $DohoHead.Parent == "player">> <<moveobj $DohoHead $NearBuggy>> <</if>>
Ты <<= $DohoHead.Parent != "player" ? "подхватываешь голову Дохо с земли, " : "">>лезешь внутрь багги, усаживаешься в маленькое пластиковое сиденье, аккуратно укладываешь голову <<= $DohoHead.Parent == "player" ? "Дохо" : "">>на соседнее сиденье, обвязываешь её ремнём. Осматриваешься. По очереди проверяешь ход педалей, не без труда крутишь влево-вправо руль, пробуешь переключить передачу, щёлкаешь тумблером фар — они не зажигаются, очевидно, для работы генератора нужно, чтобы работал двигатель. Удовлетворённый вылезаешь наружу.
<<moveobj $DohoHead $NULL>>
Ты <<= $DohoHead.Parent == "player" ? "кладёшь голову Дохо на землю, " : "">>поочерёдно подходишь к каждому колесу и внимательно осматриваешь их. Шины немного спущены — наверное, чтобы проще было ездить по песку — и не совсем подходят для бетона Трассы, однако, накачать их у тебя нет ни времени, ни возможности, да и не собираешься ты их беречь. Главное — добраться до Цитадели. С колесом, съехавшим в кювет, тоже всё в порядке, выехать не составит труда.
<<display "NearBuggyChasisAfterAct">>
Ты <<= $DohoHead.Parent == "player" ? "кладёшь голову Дохо на землю, " : "">>подходишь к задней части багги, поднимаешь металлический кожух. И с восхищением разглядываешь огромный V8. Давно ты не видел таких красавцев. Ловко сняв пару воздушных фильтров, ты ощупываешь оба карбюратора, по очереди вытаскиваешь все свечи, лезешь вниз, пробуешь натяжение цепи, проверяешь генератор, клубок выхлопных труб, внимательно осматриваешь небольшой нарост пускового двигателя, наконец, забираешься наверх и проверяешь уровень топлива в двух столитровых бочках. Да, механики у Кочевников знают своё дело. Тебе уже не терпится опробовать этого монстра.
<<display "NearBuggyChasisAfterAct">>
Ты <<= $DohoHead.Parent == "player" ? "кладёшь голову Дохо на землю, " : "">>нащупываешь ручку пускового двигателя и что есть силы дёргаешь за неё. Громкий высокочастотный стрёкот пускача разносится по округе. Так. Прежде, чем подключать основной двигатель, нужно время, чтобы пускач прогрелся. И это самое неприятное.
<<display "NearBuggyChasisAfterAct">> <<set $NearBuggy.Preengine = true>>
<<set $NearBuggy.Preengine = false>> <<set $NearBuggy.Counter = 0>>
Ты <<= $DohoHead.Parent == "player" ? "кладёшь голову Дохо на землю, " : "">>подходишь к V8 и толкаешь рычаг сцепления пускача с двигателем. Монстр просыпается с довольным рёвом. Ты немного подкачиваешь подачу топлива но и это необязательно — двигатель работает стабильно и ровно. Можно выдвигаться.
<<display "NearBuggyChasisAfterAct">>
<<set $MODE = "CUTSCENE">> <<set $NearBuggy.Counter++>>
<<if $DohoHead.Parent != "NULL">> Ты <<= $DohoHead.Parent != "player" ? "подхватываешь голову Дохо с земли, " : "">>лезешь внутрь багги, усаживаешься в маленькое пластиковое сиденье, аккуратно укладываешь голову <<= $DohoHead.Parent == "player" ? "Дохо" : "">>на соседнее сиденье, обвязываешь её ремнём. <<else>> Ты влезаешь в багги, усаживаешься в сиденье и киваешь голове Дохо: «Всё будет хорошо». <</if>> Потом включаешь фары — их дрожащий свет выхватывает из темноты участок Пустоши, возвращает ему привычный ржавый цвет — и, поднимая фонтан песка, выруливаешь из кювета на полотно Трассы.
<<set $ACTLOG = false>>
<<set $NearBuggy.Counter++>>
<<switch $NearBuggy.Counter>> <<case 1>> Порыкивая двигателем, ты медленно проезжаешь мимо ховера. Надо бы забрать припасы: воду, зерно, инструменты, но тебе становится дурно от мысли о том, что придётся возвращаться внутрь кунга, да и времени уже нет. <<case 2>> Проехав дальше и бросив последний взгляд на ховер, на контейнер, на место бойни, ты поворачиваешься к устремлённой к горизонту ленте Трассы и утапливаешь педаль газа. Тебе нужно добраться до Цитадели. <<case 3>> Чтобы воскресить Дохо и чтобы рассказать людям историю. <</switch>>
<<if $NearBuggy.Counter > 3>> <<addclass ".passage" "fadeOutPassage">> <<timed 2s>> <<removeclass ".passage" "fadeOutPassage">> <<replace ".passage">> <div style="display:flex;flex-direction:column;justify-content:center;align-items:center;height:90vh;"> <p style="flex-grow:7;"></p> <p class="finish"> <span>Историю о том, откуда же в Пустоши появились монстры.</span> </p> <p class="finishTheEnd"> <span>Конец</span> </p> <p class="finishFlag"> <span>Вячеслав Добранов</span> [[http://cheshire.ifiction.ru/]] [[https://klockwerk-kat.itch.io/]] <span>май-июль 2018</span> </p> </div> <</replace>> <</timed>> <</if>>
<<set $NULL.Name = "NULL">>
ПУСТОТА.
<<set $_time = "past">> /% время действия (past, present, future) %/ <<set $_sex = "M">> /% пол (M,F,N) либо множественное число (P) %/ <<set $_face = 1>> /% от 1-го, 2-го или 3-го лица идёт повествование %/ <<set $ACTLOG = true>> /% писать ли название действия в лог? %/ <<set $EXAMISACT = false>> /% считать ли осмотр (виджеты object, prp) за ход? %/ /% шаблон локации %/ <<set $MODE = "NULL">> <<set $locProto = { ID: "", Name: "", Children: [], Desc: "", Enter: "", Events: "", Acts: "", NoGo: "", Visited: 0 };>> /% шаблон объекта %/ <<set $objProto = { ID: "", Sex: "M", Name: "", NameG: "", NameD: "", NameA: "", NameI: "", NameP: "", Children: [], Parent: "", Disabled: false, Examined: 0, Shooted: false, Desc: "", Acts: "", Take: "", Drop: "" };>> /% шаблон декорации %/ <<set $propProto = { ID: "", Name: "", Parent: "", Disabled: false, Examined: 0, Desc: "" };>> <<set $locsArray = Story.lookup("tags", "loc")>> /% список параграфов с локациями %/ <<set $objsArray = Story.lookup("tags", "obj")>> /% список параграфов с объектами %/ <<set $propsArray = Story.lookup("tags", "prop")>> /% список параграфов с декорациями %/ /% создание всех локаций по шаблону $locProto %/ <<for _k to 0; _k < $locsArray.length; _k++>> <<= "<<set $"+$locsArray[_k].title+" = clone($locProto)>>">> <</for>> /% создание всех объектов по шаблону $objProto %/ <<for _k to 0; _k < $objsArray.length; _k++>> <<= "<<set $"+$objsArray[_k].title+" = clone($objProto)>>">> <</for>> /% создание всех декораций по шаблону $propProto %/ <<for _k to 0; _k < $propsArray.length; _k++>> <<= "<<set $"+$propsArray[_k].title+" = clone($propProto)>>">> <</for>> /% инициализация всех локаций %/ <<for _k to 0; _k < $locsArray.length; _k++>> <<set _t = $locsArray[_k].title>> <<display _t>> <<= "<<set $"+_t+".ID = '"+_t+"'>>">> <<= "<<set $"+_t+".Enter = '"+_t+"Enter'>>">> <<= "<<set $"+_t+".Events = '"+_t+"Events'>>">> <<= "<<set $"+_t+".Desc = '"+_t+"Desc'>>">> <<= "<<set $"+_t+".Acts = '"+_t+"Acts'>>">> <<= "<<set $"+_t+".NoGo = '"+_t+"NoGo'>>">> <</for>> /% инициализация всех объектов %/ <<for _k to 0; _k < $objsArray.length; _k++>> <<set _t = $objsArray[_k].title>> <<display _t>> <<= "<<set $"+_t+".ID = '"+_t+"'>>">> <<= "<<set $"+_t+".Desc = '"+_t+"Desc'>>">> <<= "<<set $"+_t+".Place = '"+_t+"Place'>>">> <<= "<<set $"+_t+".Acts = '"+_t+"Acts'>>">> <<= "<<set $"+_t+".Take = '"+_t+"Take'>>">> <<= "<<set $"+_t+".Drop = '"+_t+"Drop'>>">> <</for>> /% инициализация всех декораций %/ <<for _k to 0; _k < $propsArray.length; _k++>> <<set _t = $propsArray[_k].title>> <<display _t>> <<= "<<set $"+_t+".ID = '"+_t+"'>>">> <<= "<<set $"+_t+".Desc = '"+_t+"Desc'>>">> <</for>> /% инициализация персонажей %/ <<for _k to 0; _k < $objsArray.length; _k++>> <<if Story.get($objsArray[_k].title).tags.includes("char")>> <<set _t = $objsArray[_k].title>> <<= "<<set $"+_t+"['Talk'] = '"+_t+"Talk'>>">> /%<<= "<<set $"+_t+"['Topics'] = '"+_t+"Topics'>>">> <<= "<<display $"+_t+".Topics>>">>%/ <</if>> <</for>> /% распределение «детей» по «родителям» %/ <<for _k to 0; _k < $objsArray.length; _k++>> <<set _t = $objsArray[_k].title>> <<= "<<set _p = $"+_t+".Parent>>">> <<= "<<set $"+_p+".Children.push($"+_t+".ID)>>">> <</for>> /% ,, ,, ,, ,, .g8""8q. *MM db mm `7MM mm mm db .dP' `YM. MM MM MM MM MM dM' `MM MM,dMMb.`7MM .gP"Ya ,p6"bo mmMMmm ,6"Yb. MM mmMMmm .gP"Ya `7Mb,od8 ,6"Yb.mmMMmm `7MM ,pW"Wq.`7MMpMMMb. ,pP"Ybd MM MM MM `Mb MM ,M' Yb 6M' OO MM 8) MM MM MM ,M' Yb MM' "'8) MM MM MM 6W' `Wb MM MM 8I `" MM. ,MP MM M8 MM 8M"""""" 8M MM ,pm9MM MM MM 8M"""""" MM ,pm9MM MM MM 8M M8 MM MM `YMMMa. `Mb. ,dP' MM. ,M9 MM YM. , YM. , MM 8M MM MM MM YM. , MM 8M MM MM MM YA. ,A9 MM MM L. I8 `"bmmd"' P^YbmdP' MM `Mbmmd' YMbmd' `Mbmo `Moo9^Yo..JMML. `Mbmo`Mbmmd'.JMML. `Moo9^Yo.`Mbmo.JMML.`Ybmd9'.JMML JMML.M9mmmP' QO MP `bmP %/
/% # # # ### ## # # ## # # ## ## ### # # # # ## #### # # # # # ## # # # # # # ## # # # # # # ## # # # # # # ## # # ## # ## ## ### # # # %/ /% виджет удаления объекта %/ /% $args[0] = объект для удаления %/ <<widget "removeobj">> <<disablelink $args[0] $args[0].Parent>> <<set $args[0].Disabled = true>> <<if $args[0].Parent and $args[0].Parent != "NULL">> /% если «родитель» есть, то удаляем объект из его «детей» %/ <<= "<<set $"+$args[0].Parent+".Children.splice($"+$args[0].Parent+".Children.indexOf($args[0].ID), 1)>>">> <<= "<<set $"+$args[0].ID+".FormerParent = $"+$args[0].ID+".Parent>>">> /% записываем «текущего» родителя в «предыдущие» %/ <<set $args[0].Parent = "NULL">> /% обнуляем родителя в свойствах объекта %/ <</if>> <<replace ".inventory">> <<display "Inventory">> <</replace>> <</widget>> /% # # # # # ## # # ## ## ### # #### # # # # # ## # # # # # # # # # # # ## # # # # # # # ## # ## ## ### # # # %/ /% виджет перемещения объекта %/ /% $args[0] = объект для перемещения $args[1] = объект, в который происходит перемещение %/ <<widget "moveobj">> <<disablelink $args[0] $args[0].Parent>> <<enablelink $args[0] $args[1]>> <<if $args[0].Parent and $args[0].Parent != "NULL">> /% если «родитель» есть, то удаляем объект из его «детей» %/ <<= "<<set $"+$args[0].Parent+".Children.splice($"+$args[0].Parent+".Children.indexOf($args[0].ID), 1)>>">> <<= "<<set $"+$args[0].ID+".FormerParent = $"+$args[0].ID+".Parent>>">> /% записываем «текущего» родителя в «предыдущие» %/ <</if>> <<= "<<set $"+$args[0].ID+".Parent = $args[1].ID>>">> /% меняем родителя в свойствах объекта %/ <<= "<<set $"+$args[0].Parent+".Children.push($args[0].ID)>>">> /% добавляем объект в список «детей» %/ <<replace ".inventory">> <<display "Inventory">> <</replace>> <</widget>> /% # # # ## ## # # # # # # # ### ## ### ### ### # ## # ## ### # # # # # ## # # # # # # ## # # # # ## # # # ## # ## # # # ## # # # # # # ### ### ### # # ### ### ## ### ### # # # # %/ /% виджет отключения ссылок объекта %/ /% $args[0] = объект для отключения ссылок $args[1] = имя родителя объекта %/ <<widget "disablelink">> /% отключаем ссылки с классами "link" и "[родитель-объект]" %/ <<script>> var link = ".link."+variables().args[1]+"-"+variables().args[0].ID; if ($(link)){ $(link).addClass("disabled"); } <</script>> <</widget>> /% # ## ## # # # # # # ## ### ### ### # ## # ## ### # # # ## # # # # # # # # ## # # # # ## ## # # # ## # # # ## # # # # # # ## # # # # ### ### ## ### ### # # # # %/ /% виджет включения ссылок объекта %/ /% $args[0] = объект для включения ссылок $args[1] = родитель объекта %/ <<widget "enablelink">> /% включаем ссылки с классами "link" и "[родитель-объект]" %/ <<script>> var link = ".link."+variables().args[1].ID+"-"+variables().args[0].ID; if ($(link)){ $(link).removeClass("disabled"); } <</script>> <</widget>> /% db ;MM: ,V^MM. `7MMpdMAo.`7MMpdMAo. .gP"Ya ,6"Yb. `7Mb,od8 .gP"Ya `7MMpMMMb. ,p6"bo .gP"Ya ,M `MM MM `Wb MM `Wb ,M' Yb 8) MM MM' "',M' Yb MM MM 6M' OO ,M' Yb AbmmmqMA MM M8 MM M8 8M"""""" ,pm9MM MM 8M"""""" MM MM 8M 8M"""""" A' VML MM ,AP MM ,AP YM. , 8M MM MM YM. , MM MM YM. , YM. , .AMA. .AMMA. MMbmmd' MMbmmd' `Mbmmd' `Moo9^Yo..JMML. `Mbmmd'.JMML JMML.YMbmd' `Mbmmd' MM MM .JMML. .JMML. %/
<<widget "DarkTheme">> <<set $Theme = "DarkTheme">> <<removeclass "body">> <<addclass "body" "darktheme">> <</widget>> <<widget "LightTheme">> <<set $Theme = "LightTheme">> <<removeclass "body">> <<addclass "body" "lighttheme">> <</widget>> /% ,, ,... ,... `7MM"""Yb. db .d' "".d' "" mm MM `Yb. dM` dM` MM MM `Mb `7MM mMMmm mMMmm.gP"Ya `7Mb,od8 .gP"Ya `7MMpMMMb.mmMMmm MM MM MM MM MM ,M' Yb MM' "',M' Yb MM MM MM MM ,MP MM MM MM 8M"""""" MM 8M"""""" MM MM MM MM ,dP' MM MM MM YM. , MM YM. , MM MM MM .JMMmmmdP' .JMML..JMML..JMML.`Mbmmd'.JMML. `Mbmmd'.JMML JMML.`Mbmo %/
/% ### # # # # ### ## ### ## # # ### ### # # # # # # # # # # # # # # # # # # # # # # # # # # ## # # ## ### # # %/ <<widget "Pronoun">> <<switch $_face>> <<case 1>> <<switch $_sex>> <<case "M" "F" "N">> <<set $PnNom = "я">> <<set $PnGen = "меня">> <<set $PnDat = "мне">> <<set $PnAcc = "меня">> <<set $PnIns = "мной">> <<set $PnPre = "мне">> <<set $PPnNom = "Я">> <<set $PPnGen = "Меня">> <<set $PPnDat = "Мне">> <<set $PPnAcc = "Меня">> <<set $PPnIns = "Мной">> <<set $PPnPre = "Мне">> <<case "P">> <<set $PnNom = "мы">> <<set $PnGen = "нас">> <<set $PnDat = "нам">> <<set $PnAcc = "нас">> <<set $PnIns = "нами">> <<set $PnPre = "нас">> <<set $PPnNom = "Мы">> <<set $PPnGen = "Нас">> <<set $PPnDat = "Нам">> <<set $PPnAcc = "Нас">> <<set $PPnIns = "Нами">> <<set $PPnPre = "Нас">> <</switch>> <<case 2>> <<switch $_sex>> <<case "M" "F" "N">> <<set $PnNom = "ты">> <<set $PnGen = "тебя">> <<set $PnDat = "тебе">> <<set $PnAcc = "тебя">> <<set $PnIns = "тобой">> <<set $PnPre = "тебе">> <<set $PPnNom = "Ты">> <<set $PPnGen = "Тебя">> <<set $PPnDat = "Тебе">> <<set $PPnAcc = "Тебя">> <<set $PPnIns = "Тобой">> <<set $PPnPre = "Тебе">> <<case "P">> <<set $PnNom = "вы">> <<set $PnGen = "вас">> <<set $PnDat = "вам">> <<set $PnAcc = "вас">> <<set $PnIns = "вами">> <<set $PnPre = "вас">> <<set $PPnNom = "Вы">> <<set $PPnGen = "Вас">> <<set $PPnDat = "Вам">> <<set $PPnAcc = "Вас">> <<set $PPnIns = "Вами">> <<set $PPnPre = "Вас">> <</switch>> <<case 3>> <<switch $_sex>> <<case "M">> <<set $PnNom = "он">> <<set $PnGen = "его">> <<set $PnDat = "ему">> <<set $PnAcc = "его">> <<set $PnIns = "им">> <<set $PnPre = "нём">> <<set $PPnNom = "Он">> <<set $PPnGen = "Его">> <<set $PPnDat = "Ему">> <<set $PPnAcc = "Его">> <<set $PPnIns = "Им">> <<set $PPnPre = "Нём">> <<case "F">> <<set $PnNom = "она">> <<set $PnGen = "её">> <<set $PnDat = "ей">> <<set $PnAcc = "её">> <<set $PnIns = "ею">> <<set $PnPre = "ней">> <<set $PPnNom = "Она">> <<set $PPnGen = "Её">> <<set $PPnDat = "Ей">> <<set $PPnAcc = "Её">> <<set $PPnIns = "Ею">> <<set $PPnPre = "Ней">> <<case "N">> <<set $PnNom = "оно">> <<set $PnGen = "его">> <<set $PnDat = "ему">> <<set $PnAcc = "его">> <<set $PnIns = "им">> <<set $PnPre = "нём">> <<set $PPnNom = "Оно">> <<set $PPnGen = "Его">> <<set $PPnDat = "Ему">> <<set $PPnAcc = "Его">> <<set $PPnIns = "Им">> <<set $PPnPre = "Нём">> <<case "P">> <<set $PnNom = "они">> <<set $PnGen = "их">> <<set $PnDat = "им">> <<set $PnAcc = "их">> <<set $PnIns = "им">> <<set $PnPre = "них">> <<set $PPnNom = "Они">> <<set $PPnGen = "Их">> <<set $PPnDat = "Им">> <<set $PPnAcc = "Их">> <<set $PPnIns = "Им">> <<set $PPnPre = "Них">> <</switch>> <</switch>> <</widget>> /% # # ## # # # # # # # ### ### ## # # # # # ## # ## # # # # # ## ## ## ## ## # # ### ## %/ <<widget "UCase">> <<set _s = "">> <<for _i to 0; _i lt $args[0].length; _i++>> <<if /[a-zа-я]/i.test($args[0].charAt(_i))>> <<set _u = $args[0].charAt(_i).toUpperCase() + $args[0].slice(_i+1)>> <<break>> <<else>> <<set _s = _s+$args[0].charAt(_i)>> <</if>> <</for>> <<= "<<set $"+$args[1]+" = _s+_u>>">> <</widget>> /% ,, `7MMF' `7MF' *MM `MA ,V MM VM: ,V .gP"Ya `7Mb,od8 MM,dMMb. ,pP"Ybd MM. M',M' Yb MM' "' MM `Mb 8I `" `MM A' 8M"""""" MM MM M8 `YMMMa. :MM; YM. , MM MM. ,M9 L. I8 VF `Mbmmd'.JMML. P^YbmdP' M9mmmP' %/
/% ### # # # # ### # # ## # # # ## # ## # # ## # # ## # # # # # ## %/ /% «Взять» %/ /% $args[0] = объект для взятия %/ <<widget "Take">> <<if $args[0].Parent != "player">> <<if $args[1]>> <<set $linktext = $args[1]+" "+$args[0].NameA>> <<else>> <<set $linktext = "Взять "+$args[0].NameA>> <</if>> <<if Story.has($args[0].Take)>> <<set $objectActResult = tale.get($args[0].Take).processText()>> <<else>> <<switch $_time>> <<case "past">> <<switch $_sex>> <<case "M">> <<set _v = "взял">> <<case "F">> <<set _v = "взяла">> <<case "N">> <<set _v = "взяло">> <<case "P">> <<set _v = "взяли">> <</switch>> <<case "present">> <<switch $_face>> <<case 1>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "беру">> <<case "P">> <<set _v = "берём">> <</switch>> <<case 2>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "берёшь">> <<case "P">> <<set _v = "берёте">> <</switch>> <<case 3>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "берёт">> <<case "P">> <<set _v = "берут">> <</switch>> <</switch>> <<case "future">> <<switch $_face>> <<case 1>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "возьму">> <<case "P">> <<set _v = "возьмём">> <</switch>> <<case 2>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "возьмёшь">> <<case "P">> <<set _v = "возьмёте">> <</switch>> <<case 3>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "возьмёт">> <<case "P">> <<set _v = "возьмут">> <</switch>> <</switch>> <</switch>> <<set $objectActResult = $PPnNom+" "+_v+" "+$args[0].NameA+".">> <</if>> <<= "<span class='link act "+$args[0].Take+"'><<link '"+$linktext+"'>><<moveobj $"+$args[0].ID+" $player>><<actrefresh $"+$args[0].ID+" '"+$linktext+"' '"+$objectActResult+"'>><</link>></span><br>">> <</if>> <</widget>> /% ### # # # # ### ## ### # # # # # # # # # # # # # # # ### # ## ### # %/ /% «Бросить» %/ /% $args[0] = объект для сброса %/ <<widget "Drop">> <<if $args[0].Parent == "player">> <<if $args[1]>> <<set $linktext = $args[1]+" "+$args[0].NameA+" здесь">> <<else>> <<set $linktext = "Оставить "+$args[0].NameA+" здесь">> <</if>> <<if Story.has($args[0].Drop)>> <<set $objectActResult = tale.get($args[0].Drop).processText()>> <<else>> <<switch $_time>> <<case "past">> <<switch $_sex>> <<case "M">> <<set _v = "бросил">> <<case "F">> <<set _v = "бросила">> <<case "N">> <<set _v = "бросило">> <<case "P">> <<set _v = "бросили">> <</switch>> <<case "present">> <<switch $_face>> <<case 1>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "бросаю">> <<case "P">> <<set _v = "бросаем">> <</switch>> <<case 2>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "бросаешь">> <<case "P">> <<set _v = "бросаете">> <</switch>> <<case 3>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "бросает">> <<case "P">> <<set _v = "бросают">> <</switch>> <</switch>> <<case "future">> <<switch $_face>> <<case 1>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "брошу">> <<case "P">> <<set _v = "бросим">> <</switch>> <<case 2>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "бросишь">> <<case "P">> <<set _v = "бросите">> <</switch>> <<case 3>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "бросит">> <<case "P">> <<set _v = "бросят">> <</switch>> <</switch>> <</switch>> <<set $objectActResult = $PPnNom+" "+_v+" "+$args[0].NameA+".">> <</if>> <<= "<span class='link act "+$args[0].Drop+"'><<link '"+$linktext+"'>><<moveobj $"+$args[0].ID+" $loc>><<actrefresh $"+$args[0].ID+" '"+$linktext+"' '"+$objectActResult+"'>><</link>></span><br>">> <</if>> <</widget>> /% ### # # # # ## # # ## # # ## ### # ## #### # # # # # ## # # ## # # # # # # ## # # ## # # ## # ## %/ /% Глагол с удалением объекта %/ /% $args[0] = объект для удаления $args[1] = имя действия $args[2] = имя параграфа с описанием действия %/ <<widget "Remove">> <<set $objectActResult = tale.get($args[2]).processText()>> <<set $objectAct = '<<Remove $'+$args[0].ID+' "'+$args[1]+'" "'+$args[2]+'">>'>> /% действие для создания ссылки на повтор !внимание на обратную вложенность кавычек! %/ <<= "<span class='link act "+$args[2]+"'><<link '"+$args[1]+"'>><<removeobj $"+$args[0].ID+">><<actrefresh $"+$args[0].ID+" '"+$args[1]+"' '"+$objectActResult+"' '"+$objectAct+"'>><</link>></span><br>">> <</widget>> /% # # ## # ## # # # # ## # ## # # ## ### # ## # # #### # # # ## # # # # # # # # ## # # ## ## %/ /% Глагол без последствий — выводит только описание %/ /% $args[0] = объект с этим действием $args[1] = имя действия $args[2] = имя параграфа с описанием действия %/ <<widget "NoAct">> <<set $objectActResult = tale.get($args[2]).processText()>> <<= "<span class='link act "+$args[2]+"'><<link '"+$args[1]+"'>><<actrefresh $"+$args[0].ID+" '"+$args[1]+"' '"+$objectActResult+"'>><</link>></span><br>">> <</widget>> /% # # ## # ## ## # # # # # # ## # ## # # ## ### # # ### ## ## # ## # # #### # # # # # # # # ## # ## # # # # # # # # # # # ## # # ## # # ## ## ## # # ## ## %/ /% Глагол без последствий — выводит только описание и только один раз %/ /% $args[0] = объект с этим действием $args[1] = имя действия $args[2] = имя параграфа с описанием действия %/ <<widget "NoActOnce">> <<= "<<if $"+$args[2]+"_seen>><<set $NAO = $"+$args[2]+"_seen>><</if>>">> <<if !$NAO>> <<set $objectActResult = tale.get($args[2]).processText()>> <<= "<span class='link act "+$args[2]+"'><<link '"+$args[1]+"'>><<set $"+$args[2]+"_seen = true>><<actrefresh $"+$args[0].ID+" '"+$args[1]+"' '"+$objectActResult+"'>><</link>></span><br>">> <</if>> <<set $NAO = false>> <</widget>> /% ## # # # # # # ## ### #### # # # # # # # # ## ## %/ /% Глагол с некоторым кодом %/ /% $args[0] = объект с этим действием $args[1] = имя действия $args[2] = имя параграфа с описанием действия %/ <<widget "Act">> <<set $objectActResult = tale.get($args[2]).processText()>> <<if Story.has($args[2]+"Act")>> <<set $objectAct = $args[2]+"Act">> <<else>> <<set $objectAct = "NULL">> <</if>> <<if Story.has($args[2]+"AfterAct")>> /% !! highly experimental stuff !! %/ <<set $objectAfterAct = $args[2]+"AfterAct">> <<else>> <<set $objectAfterAct = "NULL">> <</if>> <<= "<span class='link act "+$args[2]+"'><<link '"+$args[1]+"'>><<display '"+$objectAct+"'>><<actrefresh $"+$args[0].ID+" '"+$args[1]+"' '"+$objectActResult+"'>><<display '"+$objectAfterAct+"'>><</link>></span><br>">> <</widget>> /% ## # ## # # # # # # # ## ### # # ### ## ## #### # # # # # # # # ## # # # # # # # # # ## # # ## ## ## # # ## ## %/ /% Одноразовый глагол с некоторым кодом %/ /% $args[0] = объект с этим действием $args[1] = имя действия $args[2] = имя параграфа с описанием действия %/ <<widget "ActOnce">> <<= "<<if $"+$args[2]+"_seen>><<set $AO = $"+$args[2]+"_seen>><</if>>">> <<if !$AO>> <<set $objectActResult = tale.get($args[2]).processText()>> <<if Story.has($args[2]+"Act")>> <<set $objectAct = $args[2]+"Act">> <<else>> <<set $objectAct = "NULL">> <</if>> <<if Story.has($args[2]+"AfterAct")>> /% !! highly experimental stuff !! %/ <<set $objectAfterAct = $args[2]+"AfterAct">> <<else>> <<set $objectAfterAct = "NULL">> <</if>> <<= "<span class='link act "+$args[2]+"'><<link '"+$args[1]+"'>><<display '"+$objectAct+"'>><<set $"+$args[2]+"_seen = true>><<actrefresh $"+$args[0].ID+" '"+$args[1]+"' '"+$objectActResult+"'>><<display '"+$objectAfterAct+"'>><</link>></span><br>">> <</if>> <<set $AO = false>> <</widget>> /% ## # # ### ## # # # # # # # # # ### ### ### ### # ### # # # # # # # # # # # # # # ## # # # # ## # # # # ## # # # ## ## # # # ## # # # ### # # %/ /% Запуск режима разговора с персонажем %/ /% $args[0] = субъект действия $args[1] = имя действия %/ <<widget "StartTalk">> <<set $talkResult = Story.get($args[0].ID+"StartTalk").processText()>> <<= "<span class='link act "+$args[0].ID+"StartTalk'><<link '"+$args[1]+"'>><<set $MODE='talking'>><<actrefresh $"+$args[0].ID+" '"+$args[1]+"' '"+$talkResult+"'>><<set $ACTLOG=false>><</link>></span><br>">> <</widget>> /% ### # # # # # # # # ## ### ## ## # ## ### ### # # # # # # # # # ## # # # # # # # # # # ## # # ## ### ### ## #### ### ### ## # %/ /% Список тем для разговора %/ <<widget "TopicsList">> <<set $Topic = "NULL">> <<set $CurrentTopic = false>> <<for _t to 0; _t < $player.Topics.length; _t++>> <<= "<<set _a = $player."+$player.Topics[_t]+">>">> <<if _a.includes(1)>> <<capture _t, _a>> <p style="margin:0;"> <<link `$player.Topics[_t]+"…"`>> <<replace ".object_actions">> <<set $CurrentTopic = $player.Topics[_t]>> <<set $PhrasesList = _a>> <<Topic $CurrentTopic $PhrasesList>> <</replace>> <</link>> </p> <</capture>> <</if>> <</for>> <br> <<EndTalk>> <</widget>> /% ### # # # ## ### ## ## # # # # # # # # # # # # # # # ## ### ### ## # %/ /% Выбор темы %/ /% $args[0] = выбранная тема для разговора $args[1] = массив фраз в этой теме %/ <<widget "Topic">> <<for _d to $args[1].length; _d >= 0; _d-->> <<if $args[1][_d] == 2>> <<break>> <<elseif $args[1][_d] == 1>> <<set _tp = $args[0]+_d>> <<Phrase _tp>> <<break>> <</if>> <</for>> <br> <<= "<span class='link act "+$args[0].ID+"RefreshTalk'><<link 'Сменить тему разговора'>><<set $CurrentTopic = false>><<actrefresh $"+$focus.ID+" '' ''>><</link>></span>">> <br> <<EndTalk>> <</widget>> /% ### # # # # # # ### ### ### ### ## ### # # # # # # ## # ## # # # # # ## ## ## # # # # # # ### ## %/ /% Выбор фразы %/ /% $args[0] = код фразы %/ <<widget "Phrase">> <<set $Topic = $args[0]>> <<display "DohoKungTalk">> <<set $talkResult = $question+"<br>"+$answer>> <<= "<span class='link act "+$focus.ID+"Phrase"+$args[0]+"'><<link '"+$question+"'>><<set $MODE='talking'>><<= $clockwork>><<actrefresh $"+$focus.ID+" '"+$args[0]+"' '"+$talkResult+"'>><<set $ACTLOG=false>><</link>></span><br>">> <</widget>> /% #### # ### ## # # # # # # ### ### ### # ### # # # # # # # # # # # # ## # # # # # # # ## # # # #### # # ### # # # ### # # %/ /% Завершение режима разговора с персонажем %/ <<widget "EndTalk">> <<= "<span class='link act "+$focus+"EndTalk'><<link 'Закончить разговор'>><<set $CurrentTopic = false>><<set $Topic = false>><<set $MODE='NULL'>><<actrefresh $focus '' ''>><<set $ACTLOG=true>><</link>></span><br>">> <</widget>> /% ### # ## # # # # # # # ### ### ## ### # # ## ### # # # # # ## # # #### # # # # # # ## # # # # # ### # # ## ## # # # ## ## %/ /% Запуск режима взаимодействия с другим объектом %/ /% $args[0] = субъект действия $args[1] = имя действия $args[2] = имя отмены действия $args[3] = имя режима %/ <<widget "InterAct">> <<= "<span class='link act "+$args[0].ID+"InterAct'><<link '"+$args[1]+"'>><<set $MODE='"+$args[3]+"'>><<actrefresh $"+$args[0].ID+" '"+$args[2]+"' ' ' '"+$args[3]+"'>><</link>></span><br>">> <</widget>> /% ### # ## # ### ## # # # # # # # # # # # ### ### ## ### # # ## ### # # ## ### # # # ### # # # # # ## # # #### # # ### # ## ## # # # # # # # # ## # # # # # # # ## ## # # # # ### # # ## ## # # # ## ## # # ## ### ### ### ## %/ /% Вывод результата взаимодействия %/ /% $args[0] = субъект действия $args[1] = имя действия $args[2] = имя параграфа с описанием действия | стандартное описание действия $args[3] = объект действия %/ <<widget "InterActResult">> <<if Story.has($args[2]+"Act")>> <<set $objectAct = $args[2]+"Act">> <<else>> <<set $objectAct = "NULL">> <</if>> <<if Story.has($args[2]+"AfterAct")>> /% !! highly experimental stuff !! %/ <<set $objectAfterAct = $args[2]+"AfterAct">> <<else>> <<set $objectAfterAct = "NULL">> <</if>> <<if Story.has($args[2])>> <<set $objectActResult = Story.get($args[2]).processText()>> <<else>> <<set $objectActResult = $args[2]>> <</if>> <<= "<<set $MODE='NULL'>><<display '"+$objectAct+"'>><<actrefresh $"+$args[0].ID+" '"+$args[1]+"' '"+$objectActResult+"'>><<display '"+$objectAfterAct+"'>>">> <</widget>> /% ### # ## # ## ## # # # # # # # # # ### ### ## ### # # ## ### # ### ### ## ## # # # # # # ## # # #### # # # # # # # # # ## # # # # # ## # # # # # # # # ## # # # ## # ### # # ## ## # # # ## ## ## # # # # ## ## ### %/ /% Прерывание режима взаимодействия %/ /% $args[0] = субъект действия $args[1] = имя действия %/ <<widget "InterActCancel">> <<= "<span class='link act "+$args[0].ID+"InterActCancel'><<link '"+$args[1]+"'>><<set $MODE='NULL'>><<set $ACTLOG=true>><<actrefresh $"+$args[0].ID+" '"+$args[1]+"'>><</link>></span><br>">> <</widget>> /% ## # # ### ## # # # # # # # # # # ### ## ## ### # # ## ### # # # ### # # # # # # # # ### # ## ## # # # # # # # # # # # # # # # ## ## # # # # ## # # ## ## ## # # ## ### ### ### ## %/ /% $args[0] = оружие $args[1] = цель %/ <<widget "ShootResult">> <<if $args[1].NameA.charAt(0) == "в" || $args[1].NameA.charAt(0) == "В">> <<set _$prep = "во ">> <<else>> <<set _$prep = "в ">> <</if>> <<if Story.has($args[1].ID+"Shoot")>> /% проверка, есть ли параграф с описанием результат выстрела, если нет, то выводится описание-заглушка %/ <<set _$shootResult = $args[1].ID+"Shoot">> <<else>> <<set _$shootResult = "[выстрел "+_$prep+$args[1].NameA+"]">> <<set $isShootSuccess = true>> <</if>> <<if $isShootSuccess>> /% проверка, был ли произведён выстрел. Флаг должен быть включён в параграфе [цель]Shoot. Для объектов с описанием-заглушкой флаг включён по-умолчанию %/ <<if $args[0].Ammo > 0>> <<set $args[0].Ammo-->> <<else>> <<set _$shootResult = "Вместо выстрела раздаётся глухое клацанье — кончились патроны.">> <</if>> <<set $isShootSuccess = false>> <</if>> <<= '<<InterActResult $'+$args[0].ID+' "Выстрелить '+_$prep+$args[1].NameA+'" "'+_$shootResult+'">>'>> <<set $args[1].Shooted = true>> <</widget>> /% # # # ### ## # # # # # # # # #### ### ## # # # # ## ### # # # ### # # # # # ## ### # ## ## # # # # # # # ## # # # # # ## ## # # # # # # # # ## # # # # ## ### ### ### ## %/ /% $args[0] = инструмент $args[1] = цель %/ <<widget "HackResult">> <<if Story.has($args[1].ID+"Hack")>> /% проверка, есть ли параграф с описанием результат рубки, если нет, то выводится отрицательное описание-заглушка %/ <<set _$hackResult = $args[1].ID+"Hack">> <<else>> <<set _$hackResult = either ( "Рубка "+$args[1].NameG+" "+$args[0].NameI+" ничего не даст.", "Он заносит "+$args[0].NameA+", но тут же, качая головой, опускает.", "Он качает головой: «Нет смысла рубить "+$args[1].NameA+"»." )>> <</if>> <<= '<<InterActResult $'+$args[0].ID+' "Ударить '+$args[0].NameI+' '+$args[1].NameA+'" "'+_$hackResult+'">>'>> <<set $args[1].Hacked = true>> <</widget>> /% #### # # # # ### ## # # # # # # # # ### # # ### ## ### ### # # ## ### ### # # ## ### # # # ### # ## # # # # # # # # # ## # # ### # ## ## # # # # # ## # # # # ## # # # ## # # # # ## ## # # # # #### # # ## ### # # # ### ### ### # # # # ## ### ### ### ## ### %/ /% $args[0] = инструмент $args[1] = цель %/ <<widget "ExtinguishResult">> <<if Story.has($args[1].ID+"Extinguish")>> /% проверка, есть ли параграф с описанием результат рубки, если нет, то выводится отрицательное описание-заглушка %/ <<set _$extinguishResult = $args[1].ID+"Extinguish">> <<else>> /%<<set _$extinguishResult = either ( "Рубка "+$args[1].NameG+" "+$args[0].NameI+" ничего не даст.", "Он заносит "+$args[0].NameA+", но тут же, качая головой, опускает.", "Он качает головой: «Нет смысла рубить "+$args[1].NameA+"»." )>>%/ <<set _$extinguishResult = "К счастью, "+$args[1].Name+" сейчас не в огне.">> <</if>> <<= '<<InterActResult $'+$args[0].ID+' "Тушить '+$args[1].NameA+' '+$args[0].NameI+'" "'+_$extinguishResult+'">>'>> <<set $args[1].Extinguished = true>> <</widget>> /% ### # ### ## # # # # # # # # ### ### ## ### ### # # ## ### # # # ### # # # ## # ## # # # ### # ## ## # # # # # # # ## ## # # # # ## ## # # # # ### # # ### ## # ## # # ## ### ### ### ## %/ /% $args[0] = то, что вставляется $args[1] = то, во что вставляется %/ <<widget "InsertResult">> <<if Story.has($args[1].ID+"Insert")>> /% проверка, есть ли параграф с описанием результат рубки, если нет, то выводится отрицательное описание-заглушка %/ <<set _$insertResult = $args[1].ID+"Insert">> <<else>> <<set _$insertResult = "Нет смысла вставлять "+$args[0].NameA+" в "+$args[1].NameA+".">> <</if>> <<= '<<InterActResult $'+$args[0].ID+' "Вставить '+$args[0].NameA+' в '+$args[1].NameA+'" "'+_$insertResult+'">>'>> <</widget>> /% # # ## # # ## # # # # # ## # ## # # ## ### # ## ## # ## # # #### # # # # # # # ## # # # # # # # # # # # # ## # # ## ## #### ## ## %/ /% Локальный глагол без последствий — выводит только описание %/ /% $args[0] = имя действия $args[1] = имя параграфа с описанием действия %/ <<widget "NoActLoc">> <<set _locActResult = tale.get($args[1]).processText()>> <<= "<span class='link actloc "+$args[1]+"'><<link '"+$args[0]+"'>><<actlocrefresh '"+$args[0]+"' '"+_locActResult+"'>><</link>></span><br>">> <</widget>> /% # # ## # # ## ## # # # # # # # ## # ## # # ## ### # ## ## # # ### ## ## # ## # # #### # # # # # # # # # # # # ## # ## # # # # # # # # # # # # # # # ## # # ## # # ## ## #### ## ## ## # # ## ## %/ /% Одноразовый локальный глагол без последствий — выводит только описание %/ /% $args[0] = имя действия $args[1] = имя параграфа с описанием действия %/ <<widget "NoActLocOnce">> <<= "<<if $"+$args[1]+"_seen>><<set $NALO = $"+$args[1]+"_seen>><</if>>">> <<if !$NALO>> <<set _locActResult = tale.get($args[1]).processText()>> <<= "<span class='link actloc "+$args[1]+"'><<link '"+$args[0]+"'>><<set $"+$args[1]+"_seen = true>><<actlocrefresh '"+$args[0]+"' '"+_locActResult+"'>><</link>></span><br>">> <</if>> <<set $NALO = false>> <</widget>> /% ## # # # # # # # # ## ### # ## ## #### # # # # # # # # # # # # # # # # ## ## #### ## ## %/ /% Локальный глагол с некоторым кодом %/ /% $args[0] = имя действия $args[1] = имя параграфа с описанием действия %/ <<widget "ActLoc">> <<set _locActResult = tale.get($args[1]).processText()>> <<if Story.has($args[1]+"Act")>> <<set _locAct = $args[1]+"Act">> <<else>> <<set _locAct = "NULL">> <</if>> <<if Story.has($args[1]+"AfterAct")>> /% !! highly experimental stuff !! %/ <<set _locAfterAct = $args[1]+"AfterAct">> <<else>> <<set _locAfterAct = "NULL">> <</if>> <<= "<span class='link actloc "+$args[1]+"'><<link '"+$args[0]+"'>><<display '"+_locAct+"'>><<actlocrefresh '"+$args[0]+"' '"+_locActResult+"'>><<display '"+_locAfterAct+"'>><</link>></span><br>">> <</widget>> /% ## # # ## # # # # # # # # ## ### # ## ## # # ### ## ## #### # # # # # # # # # # # # ## # # # # # # # # # # # # # ## # # ## ## #### ## ## ## # # ## ## %/ /% Одноразовый локальный глагол с некоторым кодом %/ /% $args[0] = имя действия $args[1] = имя параграфа с описанием действия %/ <<widget "ActLocOnce">> <<= "<<if $"+$args[1]+"_seen>><<set $ALO = $"+$args[1]+"_seen>><</if>>">> <<if !$ALO>> <<set _locActResult = tale.get($args[1]).processText()>> <<if Story.has($args[1]+"Act")>> <<set _locAct = $args[1]+"Act">> <<else>> <<set _locAct = "NULL">> <</if>> <<if Story.has($args[1]+"AfterAct")>> /% !! highly experimental stuff !! %/ <<set _locAfterAct = $args[1]+"AfterAct">> <<else>> <<set _locAfterAct = "NULL">> <</if>> <<= "<span class='link actloc "+$args[1]+"'><<link '"+$args[0]+"'>><<display '"+_locAct+"'>><<set $"+$args[1]+"_seen = true>><<actlocrefresh '"+$args[0]+"' '"+_locActResult+"'>><<display '"+_locAfterAct+"'>><</link>></span><br>">> <</if>> <<set $ALO = false>> <</widget>> /% ## # # # ## # ## # # # # # # ### ## %/ /% Переход м/у локациями %/ /% $args[0] = имя действия $args[1] = локация, в которую осушествляется переход %/ <<widget "Go">> <<= "<span class='link actloc Go"+$args[1].ID+"'><<link '"+$args[0]+"'>><<set $prevloc = $"+$loc.ID+">><<set $loc = $"+$args[1].ID+">><<moveobj $player $"+$args[1].ID+">><<goto 'ScreenBuild'>><</link>></span><br>">> <</widget>> /% # # ## ## # # # ## # ## # ## # ## # # # ## # # # ## # # # # # # # # ## ### ## %/ /% Запрет выхода из локации %/ /% $args[0] = имя действия (опционально) $args[1] = имя параграфа с описанием действия %/ <<widget "NoGo">> <<if $args.length == 1>> <<set $locActResult = $loc.NoGo>> <<elseif $args.length == 2>> <<set $locActResult = $args[1]>> <</if>> <<if Story.has($locActResult)>> <<set $locActResult = tale.get($locActResult).processText()>> <<else>> <<switch $_time>> <<case "past">> <<switch $_sex>> <<case "M">> <<set _v = "мог">> <<case "F">> <<set _v = "могла">> <<case "N">> <<set _v = "могло">> <<case "P">> <<set _v = "могли">> <</switch>> <<case "present">> <<switch $_face>> <<case 1>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "могу">> <<case "P">> <<set _v = "можем">> <</switch>> <<case 2>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "можешь">> <<case "P">> <<set _v = "можете">> <</switch>> <<case 3>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "может">> <<case "P">> <<set _v = "могут">> <</switch>> <</switch>> <<case "future">> <<switch $_face>> <<case 1>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "смогу">> <<case "P">> <<set _v = "сможем">> <</switch>> <<case 2>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "сможешь">> <<case "P">> <<set _v = "сможете">> <</switch>> <<case 3>> <<switch $_sex>> <<case "M" "F" "N">> <<set _v = "сможет">> <<case "P">> <<set _v = "смогут">> <</switch>> <</switch>> <</switch>> <<set $locActResult = $PPnNom+" не "+_v+" уйти.">> <</if>> <<= "<span class='link actloc NoGo'><<link '"+$args[0]+"'>><<actlocrefresh '"+$args[0]+"' '"+$locActResult+"'>><</link>></span><br>">> <</widget>> /% #### # # # ### # # ### # # # ## ## # ## # # #### # # # # # ## # ## # # # # # # #### # # # # # # #### ## ## %/ /% Осмотр локации %/ /% $args[0] = объект локации %/ <<widget "ExamLoc">> <<= "<<set $loc = $"+$loc.ID+">>">> /% обновляем ссылку «$loc» на реальную локацию %/ <<= "<span class='link actloc Exam"+$loc.ID+"'><<link $"+$loc.ID+".Name>><<unset $focus>><<unset $report>><<examlocrefresh>><</link>></span>">> <</widget>> /% ,, ,, `7MM"""Yb. db `7MM MM `Yb. MM MM `Mb `7MM ,pP"Ybd `7MMpdMAo. MM ,6"Yb.`7M' `MF' MM MM MM 8I `" MM `Wb MM 8) MM VA ,V MM ,MP MM `YMMMa. MM M8 MM ,pm9MM VA ,V MM ,dP' MM L. I8 MM ,AP MM 8M MM VVV .JMMmmmdP' .JMML.M9mmmP' MMbmmd'.JMML.`Moo9^Yo. ,V MM ,V .JMML. OOb" %/ /% ## ### # ## # # # # # # # # ## ### ## ## ### ### # # ## # ### # # # # # ## # ## # # # # # # # # # # # # # # ## ## # # # # # # # # # # ## ## # ## ## # # ### ### ### ### ### %/
<<unset $focus>><<= "<<set $"+$loc.ID+".Visited++>>">><div class="location_name" style="position: fixed; display: inline-flex; justify-content: center; left: 0; top: 0; padding: 1em 0; margin: 0; width: 100%;">''<<ExamLoc>>''</div><p style="height: 2.5em;margin: 0;"></p> /% возможный css для того, чтобы название локации всегда было видно: text-align: center; position: fixed; width: 40%; left: 0; top: 0; padding: 1em 0; margin: 0 30%; background-color: #111; %/ <p class="location_enter" style="font-style:italic;"><<display $loc.Enter>></p> <p class="location_description"><<display $loc.Desc>></p> <p class="location_content"><<LocationContent>></p> <p class="report"><<display $loc.Events>></p> /% Параграф для отображения лога %/ /%<p class="focus"></p>%/ <p class="object_actions" style="text-align:center;margin-bottom: 0px;"></p><p class="location_actions" style="text-align:center;margin-top: 0px;"><<display $loc.Acts>></p> <p class="inventory" style="line-height:1;"><<display "Inventory">></p> <<if $Theme == "LightTheme">> <<LightTheme>> <<else>> <<DarkTheme>> <</if>> <p class="link obj prop actloc actobj Cutscene"></p> /% фиктивный элемент для отлова ошибок %/ /% ### # # # # ### # # ## ### ### ## ### # # # # # # # # ## # # # # # # # # # # # # # # ## # # # # # # # # ### # # # ## # # ## ## # # # %/
<<set _div0 = 0>> <<set _div1 = 0>> <<set _div2 = 0>> <<for _k0 to 0; _k0 < $player.Children.length; _k0++>> <<= "<<set _child0 = $"+$player.Children[_k0]+">>">> <<if !_div0>> /% если выводится первый/единственный предмет, отделить инвентарь чертой, вывести заголовок %/ <<set _div0 = 1>> <hr> С собой: <<else>> /% если в инвентаре уже есть предмет — отделить его и последующие предметы чертой %/ | <</if>> <<object _child0.Name _child0>> <<if _child0.Children.length > 0>> /% если у предмета есть свои «дети», вывести их подобным же образом в скобках %/ ( <<for _k1 to 0; _k1 < _child0.Children.length; _k1++>> <<= "<<set _child1 = $"+_child0.Children[_k1]+">>">> <<if !_div1>> <<set _div1 = 1>> <<else>> , <</if>> <<object _child1.Name _child1>> <<if _child1.Children.length > 0>> ( <<for _k2 to 0; _k2 < _child1.Children.length; _k2++>> <<= "<<set _child2 = $"+_child1.Children[_k2]+">>">> <<if !_div2>> <<set _div2 = 1>> <<else>> , <</if>> <<object _child2.Name _child2>> <</for>> ) <</if>> <</for>> ) <</if>> <</for>>
/% ,, `7MMF' db `7MM MM MM MM `7MM `7MMpMMMb. MM ,MP',pP"Ybd MM MM MM MM MM ;Y 8I `" MM , MM MM MM MM;Mm `YMMMa. MM ,M MM MM MM MM `Mb. L. I8 .JMMmmmmMMM .JMML..JMML JMML..JMML. YA.M9mmmP' %/ /% # # # # # ## ### # ## ## ### # # # # # # ## # # # # # # # ## # # ## ### # # ## ## ## # %/ /% виджет осмотра объекта %/ /% $args[0] = текст ссылки $args[1] = объект $args[2] = дополнительные классы для ссылки %/ <<widget "object">><<="<span class='link obj "+$args[1].Parent+"-"+$args[1].ID+($args[1].Disabled ? " disabled" : "")+($args[2] ? $args[2] : "")+"'><<obj '"+$args[0]+"' $"+$args[1].ID+">></span>">><</widget>> /% обрачиваем ссылку в span и задаём ему классы "link", "obj", "[родитель-объект]", плюс, если объект отключён, добавляем класс "disabled" для тушения ссылки %/ <<widget "obj">><<link $args[0]>> <<set $focus = $args[1]>> /% обновляем фокус %/ <<if $focus.Trigger && $MODE == "NULL">> <<set $MODE = $focus.Trigger>> <<set $args[1].Trigger = "NULL">> <</if>> <<if $MODE == "NULL">> <<append ".report">> /% выводим данные объекта в фокусе %/ <p class="animated fadeInDown"> <<UCase $focus.Name "focusName">> <<if Story.get($focus.Parent).tags.contains("obj") and $focus.Parent != "player">> /% если «родитель» объекта тоже объект и не игрок, выводим и его в командную строку %/ <<= "<<set $focusParent = $"+$focus.Parent+">>">> <<UCase $focusParent.Name "focusParentName">> • <<if !$focusParent.Disabled>> /% если «родитель» объекта не отключён — выводим его имя ссылкой %/ <<object $focusParentName $focusParent>> <<else>> <<= $focusParentName>> <</if>> : <<else>> • <</if>> <<if !$focus.Disabled>> <<object $focusName $focus>> <<else>> <<= $focusName>> /% выводим имя объекта %/ <</if>> <br> <<display $focus.Desc>> /% выводим описание объекта %/ <<set $focus.Examined++>> </p> <</append>> <<if $EXAMISACT>> /% если осмотр — полноценный ход, показываем события в локации %/ <<append ".report">> <<if tale.get($loc.Events).processText().length gt 0 && $args[1]>> <p class="animated fadeInDown"> <<display $loc.Events>> </p> <</if>> <</append>> <</if>> <<script>> $(window).scrollTop($(".report p:last-child").offset().top); /% скроллимся к последней записи репорта %/ <</script>> <<replace ".object_actions">> <<if Story.has($focus.Acts)>> <p class="animated fadeInDown"> <<display $focus.Acts>> /% выводим действия объекта %/ </p> <</if>> <</replace>> <<replace ".location_actions">> <<if Story.has($loc.Acts)>> <p class="animated fadeInDown"> <<display $loc.Acts>> /% выводим действия локации%/ </p> <</if>> <</replace>> <<replace ".inventory">> <<display "Inventory">> <</replace>> <<if $EXAMISACT && $MODE == "CUTSCENE">> /% если осмотр — полноценный ход и в нём включается катсцена, то трём все действия и инвентарь %/ /%<<replace ".object_actions">> <</replace>> <<replace ".location_actions">> <</replace>>%/ <<replace ".inventory">> <</replace>> <<addclass ".link.obj, .link.prop, .link.actloc, .link.actobj" "faded">> /% гасим все ссылки для катсцены %/ <<removeclass "[class*='Cutscene']" "faded">> /% восстанавливаем ссылки «Далее» для катсцены %/ <</if>> <<elseif $MODE == "CUTSCENE">> <<append ".report">> /% выводим данные объекта в фокусе %/ <p class="animated fadeInDown"> <<UCase $focus.Name "focusName">> <<if Story.get($focus.Parent).tags.contains("obj") and $focus.Parent != "player">> /% если «родитель» объекта тоже объект и не игрок, выводим и его в командную строку %/ <<= "<<set $focusParent = $"+$focus.Parent+">>">> <<UCase $focusParent.Name "focusParentName">> • <<if !$focusParent.Disabled>> /% если «родитель» объекта не отключён — выводим его имя ссылкой %/ <<object $focusParentName $focusParent " faded">> <<else>> <<= $focusParentName>> <</if>> : <<else>> • <</if>> <<if !$focus.Disabled>> <<object $focusName $focus " faded">> <<else>> <<= $focusName>> /% выводим имя объекта %/ <</if>> <br> <<display $focus.Desc>> /% выводим описание объекта %/ <<set $focus.Examined++>> </p> <</append>> <<script>> $(window).scrollTop($(".report p:last-child").offset().top); /% скроллимся к последней записи репорта %/ <</script>> <<replace ".object_actions">> <<if Story.has($focus.Acts)>> <p class="animated fadeInDown"> <<display $focus.Acts>> /% выводим действия объекта %/ </p> <</if>> <</replace>> <<replace ".location_actions">> <</replace>> <<replace ".inventory">> <</replace>> <<addclass ".link.prop, .link.actloc, .link.obj" "faded">> /% гасим все ссылки для катсцены %/ <<elseif $MODE == "pistol_shooting">> <<ShootResult $pistol $focus>> <<elseif $MODE == "axe_hacking">> <<HackResult $axe $focus>> <<elseif $MODE == "extinguishing">> <<ExtinguishResult $fireExt $focus>> <<elseif $MODE == "inserting">> <<InsertResult $fireExt2 $focus>> <</if>> <</link>><</widget>> /% ### ### ## ### # # # # # # # # # # # # # # # ### # ## ### # # %/ /% $args[0] = текст ссылки $args[1] = объект декорации %/ /% виджет осмотра декораций %/ <<widget "prop">><<="<span class='link prop "+$args[1].ID+($args[1].Disabled ? " disabled" : "")+"'><<prp '"+$args[0]+"' $"+$args[1].ID+">></span>">><</widget>> /% обрачиваем ссылку в span и задаём ему классы "link", "prop", "[локация]", плюс, если декорация отключена, добавляем класс "disabled" для тушения ссылки %/ <<widget "prp">><<link $args[0]>> <<set $focus = $args[1]>> <<append ".report">> <p class="animated fadeInDown"> <<UCase $focus.Name "focusName">> • <<= $focusName>> <br> <<display $focus.Desc>> /% выводим описание декорации %/ <<set $focus.Examined++>> </p> <</append>> <<if $EXAMISACT>> <<append ".report">> <<if tale.get($loc.Events).processText().length gt 0 && $args[1]>> <p class="animated fadeInDown"> <<display $loc.Events>> </p> <</if>> <</append>> <</if>> <<script>> $(window).scrollTop($(".report p:last-child").offset().top); /% скроллимся к последней записи репорта %/ <</script>> <<replace ".object_actions">><</replace>> <<replace ".location_actions">> <<if Story.has($loc.Acts)>> <p class="animated fadeInDown"> <<display $loc.Acts>> /% выводим действия локации%/ </p> <</if>> <</replace>> <<replace ".inventory">> <<display "Inventory">> <</replace>> <<if $EXAMISACT && $MODE == "CUTSCENE">> /% если осмотр — полноценный ход и в нём включается катсцена, то трём все действия и инвентарь %/ <<replace ".inventory">> <</replace>> <<addclass ".link.obj, .link.prop, .link.actloc, .link.actobj" "faded">> /% гасим все ссылки для катсцены %/ <<removeclass "[class*='Cutscene']" "faded">> /% восстанавливаем ссылки «Далее» для катсцены %/ <</if>> <</link>><</widget>> /% ,, ,, ,, ,, `7MM"""Yb. db `7MM `7MM mm mm db MM `Yb. MM MM MM MM MM `Mb `7MM ,pP"Ybd `7MMpdMAo. MM ,6"Yb.`7M' `MF' ,6"Yb. MM mmMMmm .gP"Ya `7Mb,od8 ,6"Yb.mmMMmm `7MM ,pW"Wq.`7MMpMMMb. ,pP"Ybd MM MM MM 8I `" MM `Wb MM 8) MM VA ,V 8) MM MM MM ,M' Yb MM' "'8) MM MM MM 6W' `Wb MM MM 8I `" MM ,MP MM `YMMMa. MM M8 MM ,pm9MM VA ,V ,pm9MM MM MM 8M"""""" MM ,pm9MM MM MM 8M M8 MM MM `YMMMa. MM ,dP' MM L. I8 MM ,AP MM 8M MM VVV 8M MM MM MM YM. , MM 8M MM MM MM YA. ,A9 MM MM L. I8 .JMMmmmdP' .JMML.M9mmmP' MMbmmd'.JMML.`Moo9^Yo. ,V `Moo9^Yo..JMML. `Mbmo`Mbmmd'.JMML. `Moo9^Yo.`Mbmo.JMML.`Ybmd9'.JMML JMML.M9mmmP' MM ,V .JMML. OOb" %/ /% # # # # # # # ### ## ### ### ## # ### ## ### ### # # # # # # # ## ### # # # ## ## # # # ## # # # ## # # ## ## # # # # ## ## # ## # # ## ### # # %/ /% виджет обновления экрана по действию %/ /% $args[0] = объект в фокусе $args[1] = имя действия $args[2] = описание действия (опционально) $args[3] = действие для создания повторной ссылки %/ <<widget "actrefresh">> <<if $MODE == "NULL">> <<set $focus = $args[0]>> /% обновляем фокус %/ /%<<replace ".focus">><</replace>>%/ <<append ".report">> /%<<if $args[1] || $args[3]>>%/ <p class="animated fadeInDown"> <<if $ACTLOG>> /% проверка, включено ли отражение навзания действия в логе (см. Engine—Initialise) %/ <<if $args[3] && !$focus.Disabled>> //> <<= $args[3]>>// /% выводим ссылку для повторения действия %/ <<else>> //> <<= $args[1]>>// /% выводим имя действия %/ <</if>> <br> <<else>> /%<<set $ACTLOG = true>>%/ <</if>> <<= $args[2]>> /% выводим описание действия %/ </p> /%<</if>>%/ <</append>> <<append ".report">> <<if tale.get($loc.Events).processText().length gt 0 && $args[1]>> <p class="animated fadeInDown"> <<display $loc.Events>> </p> <</if>> <</append>> <<script>> $(window).scrollTop($(".report p:last-child").offset().top); /% скроллимся к последней записи репорта %/ <</script>> <<replace ".object_actions">> <<if !$focus.Disabled and Story.has($focus.Acts)>> /% если объект не отключён и у него есть действия — выводим список действий %/ <p class="animated fadeInDown"> <<display $focus.Acts>> </p> <</if>> <</replace>> <<replace ".location_actions">> <<if Story.has($loc.Acts)>> <p class="animated fadeInDown"> <<display $loc.Acts>> /% выводим действия локации%/ </p> <</if>> <</replace>> <<replace ".inventory">> <<display "Inventory">> <</replace>> /%<<unset $quickcommand>>%/ <<removeclass "*" "faded">> <<removeclass "*" "highlighted">> <<if $MODE == "CUTSCENE">> /% если в эвенте локации включается катсцена, то трём все действия и инвентарь %/ <<replace ".inventory">> <</replace>> <<addclass ".link.obj, .link.prop, .link.actloc, .link.actobj" "faded">> /% гасим все ссылки для катсцены %/ <<removeclass "[class*='Cutscene']" "faded">> /% восстанавливаем ссылки «Далее» для катсцены %/ <</if>> <<elseif $MODE == "CUTSCENE">> <<set $focus = $args[0]>> /% обновляем фокус %/ <<append ".report">> <p class="animated fadeInDown"> <<if $ACTLOG>> /% проверка, включено ли отражение навзания действия в логе (см. Engine—Initialise) %/ //> <<= $args[1]>>// /% выводим имя действия %/ <br> <<else>> /%<<set $ACTLOG = true>>%/ <</if>> <<= $args[2]>> /% выводим описание действия %/ </p> <</append>> <<script>> $(window).scrollTop($(".report p:last-child").offset().top); /% скроллимся к последней записи репорта %/ <</script>> <<replace ".object_actions">> <<if !$focus.Disabled and Story.has($focus.Acts)>> /% если объект не отключён и у него есть действия — выводим список действий %/ <p class="animated fadeInDown"> <<display $focus.Acts>> </p> <</if>> <</replace>> <<replace ".location_actions">> <</replace>> <<replace ".inventory">> <</replace>> <<addclass ".link.prop, .link.actloc, .link.obj" "faded">> /% гасим все ссылки для катсцены %/ <<elseif $MODE == "talking">> <<append ".report">> /%<<if $args[1] || $args[3]>>%/ <p class="animated fadeInDown"> <<if $ACTLOG>> /% проверка, включено ли отражение навзания действия в логе (см. Engine—Initialise) %/ //> <<= $args[1]>>// /% выводим имя действия %/ <br> <</if>> <<= $args[2]>> /% выводим описание действия %/ </p> /%<</if>>%/ <</append>> <<script>> $(window).scrollTop($(".report p:last-child").offset().top); <</script>> <<replace ".object_actions">> <p class="animated fadeInDown"> <<if !$CurrentTopic>> <<TopicsList>> <<else>> <<Topic $CurrentTopic $PhrasesList>> <</if>> </p> <</replace>> <<replace ".location_actions">> <</replace>> <<addclass ".link.prop, .link.obj, .link.actloc" "faded">> <<else>> /%<<replace ".focus">><</replace>>%/ <<replace ".object_actions">> <p class="animated fadeInDown"> <<InterActCancel $args[0] $args[1]>> </p> <</replace>> <<replace ".location_actions">> <</replace>> <<addclass ".link.prop, .link.actloc" "faded">> <<addclass ".link.obj" "highlighted">> <</if>> <</widget>> /% # ## # # # # # # # ### ## ### # ## ## ### ## # ### ## ### ### # # # # # # # # # # # ## ### # # # ## ## # # # ## # # # # # # # ## # # ## ## # # # # ## ## ### ## ## # ## # # ## ### # # %/ /% виджет обновления экрана по локальному действию %/ /% $args[0] = имя действия $args[1] = описание действия %/ <<widget "actlocrefresh">> /%<<replace ".location_enter">> <</replace>> <<replace ".location_description">> <<display $loc.Desc>> <</replace>>%/ <<if $MODE == "NULL">> <<append ".report">> <p class="animated fadeInDown"> <<if $ACTLOG>> /% проверка, включено ли отражение навзания действия в логе (см. Engine—Initialise) %/ //> <<= $args[0]>>// /% выводим имя действия %/ <br> <<else>> /%<<set $ACTLOG = true>>%/ <</if>> <<= $args[1]>> /% выводим описание действия %/ </p> <</append>> <<append ".report">> <<if tale.get($loc.Events).processText().length gt 0>> <p class="animated fadeInDown"> <<display $loc.Events>> </p> <</if>> <</append>> /%<<replace ".focus">><</replace>>%/ <<script>> $(window).scrollTop($(".report p:last-child").offset().top); /% скроллимся к последней записи репорта %/ <</script>> <<replace ".object_actions">><</replace>> <<replace ".location_actions">> <<if Story.has($loc.Acts)>> <p class="animated fadeInDown"> <<display $loc.Acts>> /% выводим действия локации%/ </p> <</if>> <</replace>> <<replace ".inventory">> <<display "Inventory">> <</replace>> <<removeclass "*" "faded">> <<if $MODE == "CUTSCENE">> /% если в эвенте локации включается катсцена, то трём все действия и инвентарь %/ <<replace ".inventory">> <</replace>> <<addclass ".link.obj, .link.prop, .link.actloc, .link.actobj" "faded">> /% гасим все ссылки для катсцены %/ <<removeclass "[class*='Cutscene']" "faded">> /% восстанавливаем ссылки «Далее» для катсцены %/ <</if>> <<elseif $MODE == "CUTSCENE">> <<append ".report">> <p class="animated fadeInDown"> <<if $ACTLOG>> /% проверка, включено ли отражение навзания действия в логе (см. Engine—Initialise) %/ //> <<= $args[0]>>// /% выводим имя действия %/ <br> <<else>> /%<<set $ACTLOG = true>>%/ <</if>> <<= $args[1]>> /% выводим описание действия %/ </p> <</append>> <<script>> $(window).scrollTop($(".report p:last-child").offset().top); /% скроллимся к последней записи репорта %/ <</script>> <<replace ".object_actions">><</replace>> <<replace ".location_actions">> <<if Story.has($loc.Acts)>> <p class="animated fadeInDown"> <<display $loc.Acts>> /% выводим действия локации%/ </p> <</if>> <</replace>> <<replace ".inventory">><</replace>> <<addclass ".link.prop, .link.actloc, .link.obj" "faded">> /% гасим все ссылки для катсцены %/ <<removeclass "[class*='Cutscene']" "faded">> /% восстанавливаем ссылки «Далее» для катсцены %/ <</if>> /%<<unset $quickcommand>>%/ <</widget>> /% ## # # # # # # ## # # ### # # # ## ## ### ## # ### ## ### ### # ## ## # # #### # # # # # # # ## ### # # # ## ## # # ## ## # ## # # # # # # # ## # # ## ## # # ## # # # # # # ### ## ## # ## # # ## ### # # %/ /% виджет обновления экрана по осмотру локации %/ <<widget "examlocrefresh">> <<replace ".location_name">>''<<ExamLoc>>''<</replace>> <<replace ".location_enter">><</replace>> <<replace ".location_description">> <p class="animated fadeInDown"> <<display $loc.Desc>> </p> <</replace>> <<replace ".location_content">> <p class="animated fadeInDown"> <<LocationContent>> </p> <</replace>> <<replace ".report">> <<if tale.get($loc.Events).processText().length gt 0>> <p class="animated fadeInDown"> <<display $loc.Events>> </p> <</if>> <</replace>> /%<<replace ".focus">><</replace>>%/ <<replace ".object_actions">><</replace>> <<replace ".location_actions">> <<if Story.has($loc.Acts)>> <p class="animated fadeInDown"> <<display $loc.Acts>> /% выводим действия локации%/ </p> <</if>> <</replace>> <<replace ".inventory">> <<display "Inventory">> <</replace>> /%<<unset $quickcommand>>%/ <<if $MODE == "CUTSCENE">> <<addclass ".link.prop, .link.actloc, .link.obj" "faded">> /% гасим все ссылки для катсцены %/ <<removeclass "[class*='Cutscene']" "faded">> /% восстанавливаем ссылки «Далее» для катсцены %/ <</if>> <</widget>> /% ## # ### ## ### ### # ## ### # # # # # # # # # # ## ## ## # # ## ## # ## ## # ## # # ### ## ### ### ### ### %/ /% виджет для изменения стиля при надевании гоглов %/ <<widget "goggles">> <<script>> $(".passage").toggleClass("goggles"); <</script>> <</widget>> /% # # # ## # # # # # # # # # ## ## ### ### ## ## ### # ## ### ### ## ### ### # # # # # # # # # # # # # # # # # # # ## # # # # # # # # ## # # # # # # # # # # # # # ## # # # #### ## ## # # ## ### ## # # ## ## # # ## ## # # ## %/ /% виджет для печатания описаний объктов «по месту» (если оно у них есть) %/ <<widget "LocationContent">> <<for _i to 0; _i < $loc.Children.length; _i++>> <<set _t = $loc.Children[_i]>> <<set _p = _t+"Place">> <<if Story.has(_p)>> /%<<if _i > 0>> <br><br> <</if>>%/ <p> <<display _p>> </p> <</if>> <</for>> <</widget>> /% ,, ,, `7MM"""Yb. db `7MM .g8"""bgd .M"""bgd .M"""bgd MM `Yb. MM .dP' `M ,MI "Y ,MI "Y MM `Mb `7MM ,pP"Ybd `7MMpdMAo. MM ,6"Yb.`7M' `MF' dM' ` `MMb. `MMb. MM MM MM 8I `" MM `Wb MM 8) MM VA ,V MM `YMMNq. `YMMNq. MM ,MP MM `YMMMa. MM M8 MM ,pm9MM VA ,V MM. . `MM . `MM MM ,dP' MM L. I8 MM ,AP MM 8M MM VVV `Mb. ,' Mb dM Mb dM .JMMmmmdP' .JMML.M9mmmP' MMbmmd'.JMML.`Moo9^Yo. ,V `"bmmmd' P"Ybmmd" P"Ybmmd" MM ,V .JMML. OOb" %/