The Call of Cthulhu - Ambient psychill
Решил поделиться свои музлом. Получилось атмосферно, думаю Г.Ф. Лавкрафт примерно такое в голове у себя и слышал периодически))
Буду рад любой обратной связи 🙏
Решил поделиться свои музлом. Получилось атмосферно, думаю Г.Ф. Лавкрафт примерно такое в голове у себя и слышал периодически))
Буду рад любой обратной связи 🙏
Больше чем за неделю получилось написать много функционала, примерный список того, что успел сделать:
Новая панель действия, куда вынесены все возможные действия игрока, фикс ходов и возможных действий, рефакторинг работы session manager.
Исправления действия Движение, в основном мелкие баги и исключения, теперь движение работает только по кнопке из панели действий и запрашивает подтверждение.
Добавлены ассеты жетонов навыков и иконок, убраны все заглушки с панелей.
Новое действие Улучшение навыка, позволяет раз в раунд прокачать любой навык с возможностью замены уже улучшенного навыка в зависимости от количествоа Сосредоточенности сыщика.
Новое действие Сбор средств - получаем деньги в свой ход.
Исправление сломанной анимации правой панели при её вызове и наведении.
Добавлено действие Атака, игрок может напасть на монстра и победить его при нахождении с ним в одной области
Действие Уклонение, также при нахождении в бою с монстром игрок может попытаться уклониться от него и тем самым сделать его изнуренным.
Реализован бросок кубика, пока только в виде логика и лога, без отрисовки бросков, позже этот обязательный визуал конечно же будет ярко представлен как основной акцент игры. Грани 5 и 6 (и 4 в случае благословения) подсвечены зеленым, а грань 1 красным.
Монстры появляются по сценарию из стартовой колоды на нужные места. Прописаны характеры монстров - охотящийся, прячущийся, патрулирующий. Монстры ищут и атакуют игроков исходя из их параметров.
Фазы в виде заглушек, в Фазе действия можем делать всё то, что было описано ранее, в Фазе монстров монстры начинают свои действия, движутся к нестабильной области (заглушка), атакуют сыщиков и наносят им урон и ужас. Фаза контактов и Фаза мифов пока в виде заглушки. Добавлены анимации и фриз состояния во время объявления фаз.
Сохранение и загрузка игры - все состояния, фазы, статистика, собранные карты, позиции сыщиков и монстров корректно сохраняются.
Естественно это всё сопровождалось множеством фиксом и правками, кое-где рефакторингом, написанием новых синглтонов и процедур. В этом посте не будет много формул и каких-то умозаключений, просто кратко пройдусь по всем пунктам выше, покажу на примере как это работает и выглядит, как обычно жду мнения в комментариях и готов к объективным правкам и изменениям!
1 Панель действий
Теперь во время Фазы действия у игрока над его панелью сыщика есть небольшая панель со всеми возможными действиями. Томми в этом ходу находится в бою с монстров, на что указывает иконка монстра возле его портрета, поэтому он может сделать лишь три действия - Уклониться, Улучшить навык и Атаковать.
По умолчанию при всех доступных действиях панель выглядит следующим образом
Особое действие будет сверять возможные сценарные события, такие как прорыв Барьера, Закрытие портала и т.д., сейчас это заглушка.
Дизайн скорее всего останется таким же, здесь не хочется ничего выдумывать, только мини иконки позже уберу на более подходящие стилистически в духе Аркхэма.
2 Действие Движение и 9 Фазы с заглушками
Так как тут были в основном мелкие фиксы, а ход стал возможен только с панели по кнопке Движение, то заодно особо показывать нечего, заодно продемонстрирую анимацию показа фаз.
3 жетоны навыков и иконки
Покажу красивую картинку, долго выбирал стилистику, в итоге пришел к таким вот жетонам, несколько добавил сразу на будущее для доп функционала, многие узнают почти все жетоны мифов и навыков.
Все жетоны вырезаны в отдельные ассеты, здесь я их просто скомпоновал на подложку коврика, чтобы показать все вместе не прикрепляя каждый отдельно. Мне больше всего нравятся жетоны навыков, книжка знаний особенно.
А так выглядят значки в панели сыщика, навык Сила уже улучшен, поэтому он подсвечен красным. Правую панель покажу дальше при активации действия Улучшение навыка.
Также сразу видно, что сосредоточенность в виде одной единицы уже потрачена, можно изучить еще один навык (не силу), а после уже решать что из прокачанного заменять.
4 Улучшение навыка и 7 Атака
Активировать действие можно в любой момент, даже во время боя с монстром. Если Сосредоточенность переполнена, то игра предоставит выбор какой улучшенный навык заменить - на примере ниже мы качаем Томми навык Воля вместо улучшенного навыка Внимание, а затем успешно атакуем и убиваем Фигуру в мантии. Пожалуй добавлю уведомление о том, точно ли игрок хочет заменить N навык на M в случае отсутствия свободной сосредоточенности или при попытке качнуть свободный навык.
5 Сбор средств
Проще некуда, нажали кнопку, подтвердили желание обогатиться - открылась панель и отработала анимация, денег стало больше.
6 Исправление анимации
Просто была проблема с одновременным вызовом из нескольких функций, которые друг друга перебивали и панель дергалась, просто убрал лишнее с небольшим рефакторингом.
8 Уклонение
Тут как и с атакой, отличие только в том, что при успешном уклонении монстр становится изнуренным и не нападет в свою фазу, а просто станет готовым, а также мы получим дополнительное действие. На примере ниже качаем навык Внимание, которое добавляет лишний кубик на бросок Уклонения и затем делаем успешный бросок. Монстр при этом помечается как изнуренный и в свой ход уже не нападет.
9 Бросок кубика, 10 Монстры и 11 Фазы
Выше уже были примеры с заглушками фаз, при каждой активации фазы стейт замораживается, показывается небольшая анимация и далее запускается конкретная фаза. Сейчас реализованы две - Фаза действия и Фаза монстров. В первой ходит игрок, во второй соответственно активируются и выполняют свои действия монстры.
Кубик пока реализован текстово, просто рандомайзер рисует "грани" в зависимости от количества "выбрасываемых" кубиков и ждет подтверждения от игрока. Далее дополню это графически.
Монстры на карте показаны в виде карточек, на них можно навести курсор и увеличить, перевернуть и посмотреть свойства, всё по правилам обычной игры. Карточка перевернута той сторонй, смотря в каком состоянии сейчас монстр - рубашкой если он в обычном состоянии, лицевой если изнурен, также добавляется дополнительная отметка о том, изнурен ли монстр. При вступлении в бой с сыщиком карточка монстра дополнительно отображается в панели этого сыщика, также добавлю мини иконку в левую панель, где находятся все сыщики, для быстрого понимания кт ос кем находится в бою.
12 Сохранение и загрузка
Можно было бы реализовать и позже, но мне надоело использовать тестовые кнопки для подгрузки сыщиков для разных тестов сценариев и фичей, так что добавил три слота как и задумывалось изначально.
Сохраняется весь стейт игры, также записываются дополнительные ID различных событий, количества ходов, перемещений, фаз, убийств монстров, уклонений, атак и т.д., как минимум для наполнения статистики сессии в конце игры и общей статистики, как максимум для получения достижений, которые также буду реализовывать.
Впереди выходные и свободное время, а значит будет возможность сделать в два раза больше!
Мы те кого на просторах интернета зовут "зоошизиками".
Мы те кому не по хер, что еще одна животина дохнет в муках.
Мы те кто не дрочит на "герань" там мы вряд-ли чем-то поможем, у нас свои мелкие пушистые заботы.
Мы те кому... кому возможно место в Кащенко.
Мы просто те кто мы есть.
Пост в конфе «Экстренный выезд. ЦФО» висел на закрепленном сообщении уже час.
«СНТ "Рассвет", уч. 402.
Соседи свалили в город, дачу вскрыли таджики под шабашку, увидели внутри крендец, вызвали ментов. Менты почесали пузо, посмотрели и уехали обратно на опорник, шалав гонять, минет вкуснее чем "мяу".
А нам оставили гору трупов.
Нужен вывоз СРОЧНО.
Куратор слился в закат, на телегу не отвечает.
Внизу — фотка подвального окна.
Из темноты реально светились десятки глаз.
И пара кадров со вспышкой: раздутые, зеленые морды.
Классика жанра. Перекуп-сдохлик или бабкин приют после инфаркта хозяйки.
— Я пас, у меня три литра фелифая дома, я их неделю пристраивать буду, места нет, — отписался Гриша-Крюгер из Подольска.
— У меня переноска одна, — добавила Ленок.
Лаговский (в миру Миша, тридцать восемь лет, ипотечная двушка в Мытищах, две свои подобрашки) скинул геолокацию в такси.
— Выезжаю. Кто на колесах? Макс, ты на своем пикапе свободен?
Макс ответил стикером с горящим экскаватором.
Он всегда был немного поехавшим, за что его и ценили и ненавидели.
Когда они подъехали к участку, весна пахла не сиренью.
Весна пахла формалином и гнилым мясом.
На крыльце сидела кошка. Обычная такая, брикетного цвета.
Сидела и смотрела на них без страха.
Когда Лаговский Мишаня открыл калитку, она открыла пасть.
Звук, который оттуда вышел, не имел отношения к «мяу».
Это был низкий гул, от которого завибрировали пломбы.
Кошка бросилась ему прямо в горло.
Макс перехватил её голыми руками.
— Тяжелая, сука! — выдохнул он, пытаясь замотать зверя в сварочные краги. — Мышцы как у культурюги!
Кошка весила килограммов семь, но дралась как буля на спидах.
Она рвала брезент краг когтями, которые оставляли борозды на жесткой коже.
Из дома воняло так, что глаза слезились.
— Охренеть, — прошептал Макс, светя фонариком в подвал. — Это сколько же их тут…
Трупы были везде.
Но это была не работа живодёра.
Трупы лежали аккуратно, рядком, словно их сложили на хранение.
И все они были старыми. Некоторые мумифицировались до состояния пергамента.
А живые… Живые выползали из-под прогнившего дивана.
Они не ползли к людям за помощью.
Они выстраивались в линию между активистами и земляным полом подвала.
Лаговский замер, сжимая шприц с ветеринарным седативом.
— Ты видишь то же, что и я? — спросил он.
Под грязью, под колтунами, под выпирающими ребрами у этих кошек была совершенно дикая анатомия.
Горбатые спины, слишком длинные задние лапы, грудные клетки шириной с гриль-пресс.
Прущая, первобытная мощь. И взгляды — абсолютно трезвые, оценивающие, полные такой вековой усталости, что становилось не по себе.
— Мусорные львы какие-то, — буркнул Макс, взводя курок шприцеметателя. — Работаем сетками. Не церемонимся, у них там еще пятнадцать рыл в дальней комнате.
Это была не эвакуация. Это был штурм ОМОНа.
Мы использовали строительные сетки-рабицы и толстые фал-веревки.
Кот прыгал на сетку, пробовал её на разрыв плечом, рычал, а потом обмякал только после второй дозы кетамина прямо в вену.
Они сопротивлялись своему спасению с осмысленной, холодной яростью.
Одна самка прокусила Максу сапог из толстой кожи и достала до ахилла.
— Нахуй эту зоошизу, — шипел Макс, затягивая жгут на своей ноге. — Бронекоты какие-то. Грузим тела, грузим живых, валим нахер отсюда.
Последнюю клетку забили битком.
Три кота, обмотанные дополнительно стяжками поверх дверцы, смотрели на людей сквозь прутья.
В их глазах плескалась чистая ненависть.
— Десять ампул осталось, — Лаговский пересчитал запасы. — Берем последних двух рыжих из кухни и уезжаем.
Мы загрузили последнюю пару в багажник пикапа.
Макс захлопнул дверь тачки. Замок щелкнул.
И в этот момент старый кирпичный фундамент дачи издал звук ломающейся кости.
Земля во дворе просела идеально ровным кругом.
Из пролома ударил фонтан горячей пыли, золы и невыносимого, могильного холода.
Давление упало так резко, что у Лаговского заложило уши, а изо рта пошел пар.
Сначала показалось, что это просто взорвалась старая газовая труба.
А потом из черной ямы начало подниматься Оно.
У него не было формы, которую мозг мог бы распознать.
Сплетение гнилой древесины, спутанных корней, обломков кошачьих черепов и черного тумана, который пожирал солнечный свет.
От сущности шел запах раскрытой могилы и озона перед ударом молнии.
Беззвучный психический вопль обрушился на сознание, вымораживая лобные доли.
Кристинка зоодавалочка, которая снимала всё на телефон для отчета спонсорам, рухнула на колени, её выворачивало желчью прямо на резиновые моднявые сапоги.
Сущность метнулась к машине. Металл тачки застонал.
Передняя ось пикапа с хрустом ушла в землю. Водительская дверь смялась внутрь.
Макс, стоявший ближе всех, успел только поднять руки.
Черное щупальце из трухи обернулось вокруг его торса.
Парень даже не пикнул — его просто втянуло в массу, и через секунду на истоптанную траву упал пустой рабочий комбинезон, из которого выкачали всё содержимое.
Лаговский почувствовал, как трещат собственные ребра.
Нужно бежать. Вызывать МЧС.
Писать пост о том, что столкнулись с утечкой неизвестного химоружия.
И тут замки клеток лопнули.
Звук был похож на выстрелы мелкокалиберной винтовки.
Стальные прутья толщиной в палец выгнулись наружу. Дверцы сорвало с петель.
Из кузова посыпались стражи.
Глаза выжигали в тумане черные дыры.
Началась бойня иного порядка.
Это не было похоже на защиту территории. Это была битва при Фермопилах.
Кот, похожий на камышового, взвился в воздух и прошел сквозь грудь сущности.
Черный туман взвыл ультразвуком.
Там, где прошли когти, осталась прореха в реальности, из которой посыпался серый пепел стертых миров.
Другие кошки приняли удары щупалец на свои тела.
Одному буквально оторвало голову, но челюсти сомкнулись на корнеобразном отростке твари и перекусили его.
Коты кусали не плоть — они грызли саму геометрию чужеродного зла.
Они знали эти движения.
Они репетировали их веками.
Древнее нечто, спавшее под СНТ «Рассвет» со времен отступления ледника, столкнулось со своей естественной антитезой.
Сущность дрогнула. Земля тяжело ухнула, смыкаясь. Фундамент снова встал на место, выглядя целым.
Рассвет окрасил небо в цвет дешевой замороженной печени напичканной марганцовкой для продаж в "Пятаке".
На траве лежал пустой комбез Макса, а вокруг лужа кровищи.
Кристина сидела у забора, раскачиваясь и глядя в одну точку.
Её кукуха улетела куда-то в сторону Ярославля и явно не собиралась возвращаться.
Лаговский ощупывал себя. Ребра вроде целы, но плечо прокушено до кости, а легкие горят огнем.
И в друг синхронное "Мяу" , не то "Мяу" которое шейрят и восхваляют в группах "Котики и Хвостики".
"Мяу" которое значило пошли вон кожаные мрази, за вас тварей дохнем хоть не мешайте.
Лаговский кое-как сел. Каждый мускул выл, где-то на горизонте запахло геммороем и импотенцией.
Руки тряслись отходняком от адреналина.
— Что... что это за... что это было? — прохрипел он.
Кот с разорванным ухом подошел ближе.
Его дыхание было горячим.
Он ткнулся мокрым носом в ладонь Лаговского.
Никакой благодарности — чисто деловой подход.
Жрать давай, твои дети завтра в школу пойдут потому что моя тёлка сдохла.
Лаговский пошарил в разгрузке.
Пакетик влажного корма класса холистик с олениной чудом не порвался.
Он выдавил розовую массу прямо на прошлогоднюю листву.
Кот понюхал. Презрительно дернул усами.
— Так, — Лаговский достал смартфон дрожащими пальцами.
Стер координаты. Удалил чат «Экстренный выезд», пока никто не очухался и не приехал сюда толпой делать контент.
— Для протокола: взорвался старый газовый баллон. Несчастный случай на производстве. Макс уехал в командировку на север.
Он посмотрел на лужу запекшейся крови, где испарился его лучший друг, сглотнул ком и заорал.
— Я беру этот участок на курацию, все слышите все каждый день сюда еду, воду, всё что нужно. Поняли!
Кот поднял на него голову, перемазанную красным.
В глазах, тяжелая усталость существ, работающих в ночную смену без выходных веками.
И Лаговский вдруг понял страшную вещь: рано или поздно один из этих пушистых мудрецов не вернется с ночной смены.
И тогда ему придется найти другого. Взять с улицы обычного помойного дурачка, принести его сюда за пазухой и оставить на крыльце.
Потому что конвейер не должен останавливаться. Небо само себя не удержит.
Скрин поста в чате спустя два дня:
«Ребят, СНТ Рассвет, 402. Кто рядом? Куратор пишет, у него машина сломалась, а у броиков еда кончилась третий день как. Закину денег на карту, купите пакетиков 50 Гурме, им стресс надо заедать вкусненьким, а то гастрит словят. И капли от клещей не забудьте, лесные же».
В начале лета разразился скандал. Известное своей непримиримостью к нейрогенерации издательство «Манн, Иванов и Фербер» выпускает книгу «Мифология Лавкрафта» из серии «Мифы от и до». Книга приурочена к столетию первого издания знакового произведения Говарда Лавкрафта «Зов Ктулху».
Почитатели Лавкрафта с замиранием сердца заметили среди списка литературы ссылку, где им обещали письма Говарда. А письма поклонники уважают чуть ли не больше самого литературного творчества писателя. Известно более 1000 писем, но беда в том, что на русский их ни разу не переводили, чем доставляли много печали. А тут — ссылка на целую книгу аж 2007 года.
Но шок от такого упущения быстро прошёл: книги такой нет.
Стали проверять остальные ссылки — нашли неточности, но они уже понятны только погружённым в тёмную атмосферу космического ужаса.
Поклонники в недоумении: что происходит? Это же бумажная книга! У неё есть номер ISBN, как положено уважаемой книге. Её экземпляры отправлены в крупнейшие библиотеки и Российскую книжную палату.
Возмущённые читатели, естественно, обращаются в издательство: что у вас происходит?
Издательство снижает градус конфликта: «Мы признаём ошибку в блоке ссылок — исправимся! Но текст же ручками писан». И добавляет: «Признаков использования ИИ в остальных блоках текста нет» (с).
И тут закрадываются сомнения.
Попросили эксперта проверить, так ли это. Эксперт экспертно заявил: да, проверил аж четырьмя способами — нейрослоп: «Вклад человека заключался лишь в компиляции ответов ИИ в единый текст» (с).
Лавкрафтоведы устремляются к этим самым «ручкам». Находят в авторах никому не известного 23-летнего поклонника и любителя котиков — Артёма Ширкунова — с уже удалённым ТГ-каналом по Лавкрафту. То есть у автора всё-таки лапки.
В отсутствие основной цели решают допросить научного редактора (даже такой имеется у этой удивительной книги). Его статья о Лавкрафте вошла в книгу и субъективно читается интересней и познавательней самой книги. Редактор разводит руками: «Ребят, мне без ссылок давали. Что смог — то проверил».
Это настолько фантастично звучит, что предлагаю любую часть книги (а она ещё доступна на цифровых платформах) загнать в бесплатный детектор нейротекстов https://yandex.ru/lab/neurodetector
Вот что выдаёт нейродетектор по началу первой главы:
Кстати, на всякий случай, только чтоб убедиться, что детектор детектит, туда же можно загнать статью научного редактора. Детектор находит там 100% человека.
Говард Лавкрафт многим известен как создатель Некрономикона, но он ещё и автор философии космического ужаса — где человек абсолютно беспомощен перед древними богами.
Показательно, что именно на примере Лавкрафта мы сегодня убедились, что человек так же беспомощен и перед новыми богами.
Подробно об этой истории написал журнал «Нож»: https://knife.media/ctulkhu-zhalko-kak-neiroset-ubivaet-knigoizdanie/
Квест вышел в феврале 2026 года и на данный момент имеет «Крайне положительные» отзывы в Steam на основе 539 отзывов. Игру действительно есть за что хвалить: максимально уютная, ламповая атмосфера, детективный сюжет, опирающийся на творчество Лавкрафта, отличный саундтрек, запоминающиеся персонажи и неплохой юмор.
The Dark Rites of Arkham рассказывает о событиях одного дня из жизни детектива полиции Джека Фостера, который по чистой случайности натыкается на загадочное убийство. В запертой изнутри комнате обнаружен обезглавленный труп, а рядом с обугленной стеной валяется чья-то оторванная кисть. По символам, вытатуированным на спине жертвы, а также каббалистическим знакам, нарисованным на полу, Джек начинает поиски знакомых убитого и составляет список подозреваемых. Сам Джек недавно перенёс тяжёлый нервный срыв из-за дела, в ходе которого его напарник покончил с собой, и теперь некоторые сослуживцы косятся на него, как на потенциального психа, но Джеку на это наплевать – он мужик боевой и за словом в карман не лезет. А если нужно, легко пускает в ход кулаки или достаёт служебный пистолет. Джек достаточно времени провёл на улицах Аркхема, чтобы не церемониться с преступниками, и моральные дилеммы его не отягощают.


В напарники ему назначают ещё более странного копа, который занимается расследованием преступлений, связанных с культами, эзотерикой и тому подобным. Конечно же, Джек, как и водится крутому копу, пытается отказаться, но начальство заставляет его сотрудничать, так что в итоге они с Харви – вторым копом – станут друзьями. Заезженные штампы здесь смотрятся бодро благодаря юмору, с которым обыгрываются. Он тут неплох и подчастую чёрен, поэтому зайдёт не всем, но лично мне понравилось.
Геймплейно The Dark Rites of Arkham – типичный point-and-click квест со вполне себе внятными загадками. Никаких мини-игр, растягивающих хронометраж, тут нет, игра сфокусирована на сюжете. Есть и типичные для жанра условности, но все адекватны и логичны.
Всем советую прослушать саундтрек игры, который в Steam отдаётся бесплатно. В нём 39 композиций, что для игры такого жанра даже много. Музыка лично у меня создавала ассоциации с L.A. Noire – кажется, в последний раз я так погружался в нуарную атмосферу ещё там. Визуальный же ряд меня порадовал детализацией – пока герои идут по улице, мимо проходят толпы прохожих, проезжают автомобили, а на заднем фоне проносятся поезда надземки и мигают неоновые вывески.


История опирается на сюжеты Лавкрафта, но при этом самостоятельна. Однако для поклонников джентльмена из Провиденса тут найдётся немало плюсов: возможность допросить Герберта Уэста, прострелить голову Кезии Мейсон, пообщаться с выходцем из Иннсмута, и так далее. Мрачный и стильный Аркхем насквозь провонял тёмными тайнами, и впечатления от города напомнили мне то, как описывал Нью-Йорк сам Лавкрафт, который и побаивался города, и тяготился им, но в то же время любовался каждым зданием, каждым тёмным уголком, что в итоге отразилось на его произведениях.
Однозначно советую The Dark Rites of Arkham всем поклонникам Лавкрафта и пиксельных квестов. Единственный минус игры – что она короткая и проходится за 6-8 часов. Ах, да, ещё в ней нет русского языка, но это обычное дело для маленьких проектов.
Автор текста: Михаил Гречанников. Написано специально для CatGeek и читателей Pikabu
🎮 🎲 Также читайте и смотрите нас на других ресурсах:
Мы всегда рады новым авторам. Если хотите предложить статью на CatGeek или заинтересованы в сотрудничестве — пишите сюда или сюда.
Может быть интересно:
Перешел к разработке и наполнению контента фаз, сейчас прописываю логику одной из самой многочисленной на возможности фазы, а именно действий сыщиков. Здесь они могут передвигаться, изучать улики, атаковать монстров, уклоняться от них, совершать обмен, копить деньги, изучать навыки, а также выполнять различные сценарые действия, открывающиеся по ходу сюжета.
Начал с действия Движение, как самого первого доступного. По правилам игры совершать каждое действие мы можем лишь один раз в фазу действия, то есть нельзя походить на три клетки игрового поля (две бесплатно, третья за деньги), а потом сделать еще один ход на 4 клетки (две бесплатно и еще две за бОльшие деньги).
Перед тем как продолжить, совсем забыл сказать, что еще успел реализовать жетоны сыщиков на игровом поле, передал им их параметры из файла состояния (урон и ужас, деньги, улики), сделал окна уведомлений при наведении на сами жетоны и легкую анимацию увеличения жетона. Кроме того, прописал на каждую область свою дополнительную объектную маску, теперь все сыщики на одной и той области района кучкуются рядом в своем месте, монстры будут появляться рядышком, жетоны безысходности выше, какие-нибудь еще жетоны в другом месте и т.д., ничто не будет друг другу мешать.
Вот они, шесть сыщиков, нижние трое изо всех сил закрывают надпись Вокзал - это я исправлю позже. При наведении на них отрабатывает всплывающее окно с главной информацией и жетон сыщика выделяется, как у Агнес Бейкер.
А здесь Майкл Макглен хотел бы расстрелять кого-то на улице из своей Чикагской пишущей машинки, но пока не умеет и не может...
В общем, касательно ходов. Есть файл состояния, который для каждого сыщика понимает, что с ним происходит в данный момент времени и глобально, например в данный момент времени это понимание того, сколько действий он уже совершил, например если походил - то в этом общем ходу у него еще осталось одно доступное действие, но второй раз походить он не сможет. А глобально это его жизни и ужас, жетоны улик и денег, навыков.
Этому файлу также передаются дополнительные эффекты различных карт, способностей и состояний. Например в видео выше вторым ходит сыщик Томми Малдун, у которого есть стартовая выбранная карта Мотоцикл. Карта Мотоцикл позволяет Томми ходить бесплатно не на две области, а на три, а уже на четвертую ходить за дополнительный доллар. На 5 областей ходить в игре никто не может (не считая телепортацию или другие механики), но тут я допустил небольшую ошибку и пока что менеджер ходов считает, что раз у Томми есть мотоцикл, то он бесплатно походит на три области, за доллар на четвертую и еще за доллар на пятую. К моменту написания поста я уже это пофиксил, и теперь он просто ходит на четвертую область за доллар.
В следующем видео уже подробно разобраны варианты действия Движение на примере одного сыщика Агнес Бейкер. Не обращайте внимание на завершение фазы - сейчас это заглушка, сбрасывающая счетчик совершенных действий для файла состояния. И то, что окно подтверждения действия находится в левом верхнем углу, сейчас оно уже по центру. Подтверждение нам нужно, чтобы случайно не кликнуть по карте и не походить туда, куда не хотели. Я пока не думал по поводу кнопки отмены последнего действия, это привнесет слишком много возможностей для игроков, скажем, не совсем честных, а подтверждение хода как раз является легальной возможностью не ошибиться с ходом.
Как устроены маршруты? По умолчанию, когда начался ход сыщика и он еще ничего не делал (действие Движение доступно), мы видим на карте белые точки возможных бесплатных ходов, в нашем случае это путь от области Вокзала до других смежных областей, улиц и областей соседних районов. Если же мы наводим курсор на интересующую нас область, то статические возможные маршруты пропадают и появляется активный анимированный. Можно провести дальнейший маршрут, увидев варианты хода за деньги (желтый третий шаг за 1$ или оранжевый четвертый шаг за суммарные 2$). А еще можно навести на центр района и увидеть все возможные пути от него, куда дотягивается игрок, либо же его максимальный кратчайший путь, который до этого района доведет (это если выбрать недосягаемый в данный момент район, как на 21 секунде в видео ниже).
Менеджер путей также рисует не один путь, а все возможные одинаковые, если их несколько, при чем если на одном из одинаковых по дальности путей будет стоять монстр - игра поведет сыщика по безопасному пути. Совершив действие никакие маршруты рисоваться не будут (тут увидел не совсем корректное поведение на видео, статический маршрут рисуется в момент выбора точки, куда хочет походить игрок, хотя его уже нужно убрать на моменте появления окна подтверждения хода - исправил это, а также добавил невозможность каких-либо действий при появлении окна подтврждения, кроме как согласия на ход или отмены), игроку остается только совершить другое действие, например атаковать монстр или изучить улицу, если у него еще остались очки действия, либо же закончить свой ход.
Сама же реализация ходов достаточно проста, у нас есть построенные графы связей всех областй, районов и улиц. Именно с помощью них мы и соединяли карту согласно сценарию. Основано всё на дискретной математике, граф это её классическая структура, а основан он на двух элементах - вершины (игровые области, районы и улицы) и рёбра (маршруты между ними). В игре граф неориентированный и невзвешенный, неориентированный это когда мы спокойно можем пройти от Вокзала до Аркхэмской лечебницы туда и обратно по одному маршруту, а невзвешенный это о, что мы можем делать это за одну стоимость в обе стороны (точнее расстояние у нас считается одинаковым в два шага).
В памяти игры все графы хранятся в созданном мной словаре, для каждого сценария он свой исходя из районов и их местоположений. Словарь же состоит из списка смежностей, который выглядит например вот так:
{
"train_station": ["str_northside_merchant", "str_northside_downtown", "arkham_advertiser", "curiosity_shop"],
"curiosity_shop": ["train_station", "arkham_advertiser"],
... }
То есть вокзал у нас соседствует с областями Аркхэм Эдвертайзер и Лавкой древностей и улицами Нортсайд - Торговый район и Нортсайд - Даунтаун, а вот Лавка древностей соседствует всего-лишь с Вокзалом и Аркхэм Эдвертайзер. Благодаря этому словарю каждая вершина знает список своих прямых соседей и позволяет понимать движку куда можно сделать ход из текущей точки.
Поиск же кратчайших путей (или одинаковых) строится на классическом BFS (Breadth-First Search), он же Поиск в ширину - фундаментальный алгоритм теории графов, который обходит вершины по уровням.
G = (V, E) это наше игровое поле из неориентированного невзвешенного графа. Топология связей задается списком смежности моего словаря Adj(u), который возвращает множество соседних локаций для текущей вершины.
Он начинает с начальной точки и последовательно исследует всех её соседей, прежде чем перейти на следующий «уровень» удаления, гарантированно находя кратчайший путь в наших невзвешенных графах. Он берет стартовую точку сыщика и проверяет всех её ближайших соседей (это 1-й круг, дальность = 1 шаг). Затем он берет соседей этих соседей (2-й круг, дальность = 2 шага) и так далее. Тот путь, который первым доберется до целевой точки, гарантированно является самым коротким. Я только добавил возможность рисовать все найденные короткие маршруты как одинаковые альтернативы, не останавливаясь на первом найденном.
Вот и всё с действием Движение! Дальше занимаюсь действими Изучение навыка, Изучение улики и Сбор средств, это будет намного быстрее и проще. Уже 8 подписчиков! Очень жду ваши комментарии и реакции, хочется по ходу разработки понимать где и что можно исправить или дополнить.
В процессе дополнения или просто просмотра старых функций, особенно тех, которые писались в самом начале, часто приходишь либо к оптимизации или вообще полного рефакторинга кода, либо к изменению визуала из-за желания исправить какие-либо косяки или просто потому, что захотелось сделать интерфейс по-новому.
Туман, первый шейдер, который написал еще для главного меню, начал окончательно мозолить глаза, кроме того при его относительно длительном перемещении был виден явный косяк бесшовности - прямоугольная, почти прозрачная текстура наложения, из которой он собирался и поверх которой накладывался, плыла по экрану и оставляла четкую прямую линию.
Квадрат Малевича. Если присмотреться, то видна горизонтальная линия по нижней части, как будто отбирает треть картинки. Кроме того такой подход с текстурой и шумом при сильно приближении выдавал мыло.
Самый первый туман работал по принципу классического скроллинга текстуры, который использовался еще в играх эпохи первой PlayStation. Грубо говоря как работают анимированные обои на скринсейвере. Координаты текстуры линейно смещались по вектору скорости в зависимости от времени, ну а время (скорость) тумана я настраивал произвольно для рандомизации:
Шейдер брал готовую статичную картинку шума и просто сдвигал сетку рендеринга. С точки зрения геометрии, здесь использовался один цветной прямоугольник (2 треугольника, 4 вершины). Это совсем , я бы сказал, что совершенно не критично для современных ресурсов процессора, разве что происходил постоянный Cache Miss при потере бесшовности, ну и тем более легко для видеокарты, но, чтобы минимизировать обрывы картинки при движении камеры, подложку под игровым миром приходилось делать физически огромной, либо оборачивать в ноду слоя параллакса. Я делал статичный размер около 3500x4500px и, конечно, это уже весомо влияло на производительность.
И здесь в верхней части то же самое, две части тумана рисуются совершенно по-разному, не сочетаясь между собой, а в динамике это проявлялось еще зуже, особенно при сильном отдалении камеры.
В общем, было вполне приемлемо, но пришло время двигаться дальше, прощай туман version 1.
Второй метод - убираем швы (добавляем бесшовность), убираем текстуру наложения и шум, начинем генерировать его на лету, никаких готовых картинок, чистая математика. В тех вариантах, что я начал пробовать и перебирать, в основно использовались два следующих метода.
Фрактальный броуновский шум с кубической интерполяцией Перлина:
И сам готовый шум после этого циклически закручивался сам в себя через так называемый Domain Warping (искажение области определения):
Мощный метод в процедурной генерации и компьютерной графике, который позволяет создавать органические и природные текстуры, искажая или деформируя шум перед их использованием.
Что касается самой геометрии и прорисовки, то здесь стало еще проще, в объекте теперь использовалось только 2 треугольника. Еще я сразу добавил, точнее допили старую фичу - при подступе к районам городам в начале уменьшать туман на 80% (вернее увеличивать его прозрачность), а в центре района и вовсе убирать на 100%. Это заставило движок в начале рисовать нужные маски поверх районов в буфер, а затем уже накладывать генерирующийся шейдер на него.
Проблема оказалась также в намного большей ресурсозависимости, но не из-за методов построения геометрии и функций, а потому что движку приходилось по 60 раз отрисовывать циклы нескольких октав шума, тригонометрических формул, матриц поворота, ведь теперь мы всё делали на лету. Видеокарте не поплохело, но так делать не надо. Зато конечно текстурная нагрузка в плане тумана упало ровно в 0%.
Тут 10 шакалов из 10, но только такой пример остался в буфере - туман в какой-то момент просто превратился в непрозрачную разлитую ртуть. Сильное искажение, смешивание цветов и альфа канала, сетка сжалась в мелкие фрактальные части, которые давали засвет.
Промежуточный вариант, точнее один из наиболее удачных настроек лучшего из дцати промежуточных. Это уже больше похоже на туман, который я хотел, но все еще слишком рваный и мелкотекстурный.
Наконец третий метод, если свести попытки на категории, дал нужный результат. Он объединил простоту первой версии и бесшовность со скоростью второй. Такой гибридный подход используется в современных играх в качестве тумана войны.
Я взял тот же низкочастотный шум, увеличил его почти в десять тысяч раз, получил пушистые и большие облака тумана. Количество прорисовок снизилось в те же 10000 раз, высвободив ресурсы. Допилил поле ореолов для районов, теперь не просто работает простая радиальная маска, а все районы и улицы имеют свою маску прозрачности, отдают точные координаты своего положения на карте. Динамическое поле ореолов, чаще называемое полем знаковых расстояний (SDF - Signed Distance Field), - это математическая или текстурная карта, которая хранит информацию о кратчайшем расстоянии от каждой точки пространства до ближайшей границы какого-либо объекта или контура. Убраны все маски, буферы прорисовки и текстуры. Один объект, простейший черный прямоугольник 2900x2200 пикселей с парой вершин и треугольников, потребление полигонов минимально, а всё, что уходит из зоны видимости игровой камеры - полностью отсекается на уровне потребляемых ресурсов. Текстурный процессор также обрабатывает это легко, пропуская через себя запекаемый шейдер шума с включенным аппаратным сглаживанием и бесшовностью. Видеокарта также тянет узор из кэш памяти на аппаратнмо уровне.
А здесь то же самое, но с настройками тумана в качестве Мин из меню игры, на случай, если кто-то будет запускать на самом слабом ПК. Можно и полностью отключить туман в настройках при желании.
На видео та текущая финальная версия, которая написана на данный момент. Разве что чуть докрутил параметры плотности тумана и сделал его подступы к районам поближе. А еще починил SDR/HDR при записи видео, так что теперь видите всё так, как и я вижу это у себя.
Времени на выходных было меньше, чем хотелось бы, так что это практически всё, что сделал за недолгие два часа. Успел добавить еще последние колоды и автоматизацию для них. На последнем скриншоте видна часть финального результата игрового стола - динамически в зависимости от сценария появляются все нужные колоды Контактов с картами каждого района и улиц, расположил их с небольшим интервалом справа от колоды Архива. В логику сразу прописал оставшиеся три района базовой версии вместе с ассетами на будущее.
Есть мысли позже сделать какое-то обрамление или рамку с текстурами и двигающимися щупальцами Ктулху по краям экрана, но это надо эксперементировать, будет ли так лучше...
На этом пока всё. На неделе приступаю к проработкам фаз действия сыщиков и монстров.
Растем, пост для моих уже 4 подписчиков! Оставляйте комментарии, чтобы хоть было понятно в каком формате продолжать, много или мало информации за раз, нужны ли эти формулы и объяснения. Спасибо!
А первый раз вылаживаю в сеть то чо в "стол" карябаю))
На Яп еще кинул, пинайте))
Луна остановилась в зените, зацепившись за ветки старого дерева, которое, вопреки всему, выросло на этом каменном берегу, что окаймляет это черное, в свете луны кажущееся мертвым море.
Дерево, луна, камень, море и почему-то, смерть. Что может означать это всё... Ответ — ничего, это просто названия, притом человеческие. А они пусты, как и сами люди, их придумавшие. И весь их погрязший в страстях мир тоже пуст.
Разве что смерть не пустое слово...
Луна и серые облака.
Сегодня они выйдут из морских глубин. Их будет трое, их всегда трое.
Абсолютно беззвучно, лишь распространяя небольшие круги на черной, с жирным блеском морской воде, поднимутся их головы, украшенные опускающимися и поднимающимися в такт дыханию шипастыми гребнями.
Их руки, похожие на шупальца осьминога, несут в себе нечто выгнутое, блестящее в свете луны. Догадаться, что это, совсем не сложно...
Ног у них нет, вместо них массивный хвост, напоминающий змеинный, раздваивающийся ниже. Они ползут. На них водоросли, тина, золотисто-черная чешуя, броней покрывает их тела. Глаза их, что мертвенно блестят в лунном свете серебром, напоминают глаза морского окуня, вокруг рта — щупальца каракатицы. Жители Глубины.
Лишь единицам удается увидеть их, еще меньше тех, кто знает о их существовании.
Их всегда трое.
Они выходят из мрака глубин, когда полная Луна окружена серыми облаками, которые бесконечным пыльным ковром застыли в неподвижности до самого горизонта.
Влажно, тепло, тихо. Каменистый берег, черное море, призрачный свет луны...
Если бы не дерево, это место можно было бы назвать мертвенно пустым. Но дерево — доказательство того, что жизнь пока еще существует. Дерево свидетель, оно смотрит.
И даже волны в это время, при этой Луне, укутанной в серое, лишаются своего голоса. Люди называют это штиль. Но это опять пустое людское слово. Волны тоже свидетели, сегодня смотрят, и они.
Она, но уже не луна, а молодая девушка, в длинных, ниспадающих до самых пят едва прозрачных одеяниях цвета выгоревшей на солнце пустыни человеческой кости, волосы её светлы. На шее и запястьях — украшения из небольших ракушек, на голове — коралловая диадема цвета запекшейся крови. Она стоит на камне, похожем на огромную плиту, уходящую в море. Ей едва ли исполнилось пятнадцать. Её лицо, омытое светом луны, прекрасно. Взгляд, устремлённый вдаль, спокоен...
Она ждёт...
Она отказалась от пут, от повязки на глаза, предложенных ей. Отказалась и от наркотика. Хотя использование этих предметов было разрешено Ритуалом.
Ритуал — свод рекомендаций, написанный несметное количество лун назад и даже не в этой вселенной. Написан он существами, что создали эту вселенную, "Теми-Что-Ушли".
Ушли. Да. Но Ритуалу не важно, кто, когда, куда и откуда, где и в какие времена, каких измерениях. Уйдут ещё тысячи цивилизаций, погибнут миллионы галактик, коллапсирует не одна Вселенная. А Ритуал будет существовать.
Он — Ритуал. Он старше чем Вселенная, старше многих Вселенных. Некоторые зовут его Хаосом, но это опять пустое человеческое слово...
Он то, что должно быть, дабы поддерживать сущее в равновесии, пока...
Пока что? А вот об этом Ритуал молчит. Да и существовали ли они, эти ушедшие, написавшие Ритуал? И они ли написали его? Кто вообще может понять Ритуал настолько, чтобы создавать для него правила? Одни вопросы и ни одного ответа.
Она ждёт...
Но не так, как ждали до неё другие, сотни, миллионы, миллионы миллионов других, таких разных и таких одинаковых в своей невинности. Всех форм, сознаний и из всех времён.
Она ждёт...
Именно ждёт, а не ожидает, как те, что были до неё. Она ждет участия, не участи...
Белые одеяния, взмахи кривых ритуальных ножей, всполохи крови... И запах — запах ламинарии, йода, крови и внутренностей. Запах смерти.
Как её звали..? Нет, никто не сможет вспомнить имя той последней, что стояла на этом же месте в прошлую Луну... Они забирают всё, даже имя. Это суть Ритуала!
Она ждёт...
Улыбка, или тень пролетевшей ночной птицы, отразилась на красивом и спокойном лице? Но птицы не летают в такую Луну, это естественно.
Даже тихоходки, эти создания, мельчайшие из вечных, которым нет дела ни до чего в этом мире, замирают в эту Луну, ощущая подвижки материй, что составляют основу всего сущего.
Улыбка, да, это была она, лёгкая, чуть заметная улыбка, которая лишь слегка приподняла уголки её губ.
Улыбка — важная часть Ритуала.
Она ждёт, она знает, ей даровано знание.
В её последнюю ночь к ней в сон пришёл Желтый Король. Сам Хастур вошёл в чертоги её разума, предстал перед ней во всем своём ужасе и великолепии.
Древний бог, Тот Которого Нельзя Называть, Невыразимый, Король в Желтом.
Она не слышала ни его мыслей, ни голоса. Только змеинное шуршание желтого плаща, обвивающего своего господина подобно влюблённому в хозяина живому существу, создавал резонанс, воспринимаемый как информация, в том месте, где они находились.
— Интересно, а где, вот это самое "где", находится — в моей голове или его... — её мыслеформа, пролетевшая любопытной пчелой, мгновенно разбита ударом желтого посоха, а она сама испытала боль, припала на одно колено, так отреагировал Хастур.
— Не слышала, не ощущала, но каким-то иррациональным образом поняла — Желтый, это посланник, глас. Он принес волю Того, Кто Живет в Глубине. Ритуал будет завершён. Глубина выбрала её.
Тела её не коснутся острые, кривые лезвия ритуальных ножей, её кровь не смешается с водой и тиной, что принесут на себе эти пришедшие из волн. Её останки не будут использованы при выборе следующей жертвы. Мерзкому жрецу нечего будет использовать для гадания. Её дух будет существовать вечно. Ритуал будет завершён.
А она займёт место подле Великого, рядом с Древними... Не зря она была лучшей из послушниц Культа Ритуала. Она заслужила.
Азатот, Йог-Сотот, Дагон, Гидра, Шуб-Ниггурат, Ньярлатотеп, Хастур, Тсатхоггуа, Гатаноа, Йиг, Наг и Йеб — все они станут её отцами, мужьями и братьями. Она же, став их матерью, сестрой и возлюбленной, возвысится.
Она будет служить Тому, Кто Живет в Глубине. Да будут благословены в вечной подвижности его щупальца.
Она намечет столько икры с зародышами будущих воинов, сколько понадобится для уничтожения этого мира. И на каркасе из костей, крови и страданий она заложит новый, лучший мир. Такой, каким он и должен был быть...
Она пройдёт трансформацию и станет Великой Матерью этого нового мира. Глубина выбрала её. Тот, Кто Живет в Глубине, выбрал её из миллиона миллионов. И даже они, все те, кто был до неё, погибли не зря. Особым способом они были разрублены на куски и сброшены в море. Их внутренности пошли на гадание и указание следующей претендентки на роль Великой Матери. Их души благодаря трансформации Ритуалом были сожжены под котлом, в котором воплощается, питаясь кусками девственной плоти Он — Тот, Кто Живет в Глубине.
Его время ещё не пришло. Но медленно и верно он проявляется в этом мире, сбрасывая с себя остатки кокона, в котором он прибыл из вселенной, отличной от нашей настолько, что этому нет слов ни у одной цивилизации, что воплощалась в мире Луны и Солнца.
А пока она подготовит этот мир, трансформирует его для Него.
Она рассмеялась. Во сне её смех напоминал острые, маленькие, стеклянные шипы, ледяные осколки света. Он лился со всех сторон, звенел, отражался от всего, возникал из каждого атома, окружал, становился сильнее, громче, ещёееееее...
Далее сон её продолжался без сновидений.
И вот она стоит перед лицом моря. Ей нечего бояться, Желтый явится за ней по Его приказу.
Трое из моря, один чуть впереди, двое сзади и по бокам треугольником, неторопливо скользят в её сторону. Их мертвые рыбьи глаза смотрят прямо на неё, щупальца сжимают рукояти кривых ножей. Она уверена, они идут приветствовать будущую Великую Матерь.
Она уже ощущает их острый морской запах, видит мёртвые их глаза. Она видит присоски на щупальцах вокруг их ртов, ещё метр — и трое из моря, как по команде, поднимают свои страшные инструменты и синхронно, как единый механизм, опускают их. Дикий крик ужаса и неистовой боли разрывает ночную тишину. Но никто не услышит, место выбрано не случайно. Дерево, волны и камни — молчаливые свидетели. Кодекс соблюдён, Ритуал исполнен.
Обе руки по локоть отсечены, обе ноги по колени — отсечены первым идущим. Она не упала, первый из треугольника держит её за волосы...
Она ещё в сознании и даже сейчас не может поверить в то, что происходит. Нет, это неправда, этого не может быть... Желтый же обещал...
Окровавленный обрубок с головой, на которой в диком безумии вытаращены глаза, а рот искажен в беззвучном крике ужаса и боли.
Лишь волосы напоминают о том, что ещё недавно это было красивой, молодой девушкой.
Взмах кривого лезвия — и её внутренности высыпаются на камни. Последнее, что она видит гаснущим взором, — это выползающего из-за камня старика в ожерельях из ракушек, рыбьих костей и морских водорослей. Он тянет руки к её дымящимся останкам. Благословенная темнота поглощает её...
Трое собирают куски отрезанной плоти, возвращаются в море. Грязный старик ползает по камню, перебирая руками внутренности, бормоча еле слышно о том, что материал попался отличный, боли достаточно, ужаса тоже, и повысив голос, срывающимся старческим фальцетом заявил:
— И заметьте, материал пошёл на жертву добровольно, без страха и сомнений. До конца веря сну, вызванному микстурой моего приготовления, в воздух взметнулся перепачканный кровью кривой палец моего приготовления!
Вдалеке мелькнула молния, скоро гроза, которая смоет следы. Так всегда, и это тоже часть Ритуала.
Тот, к кому он обращался, был молод, одет в синие джинсы, коричневый дорожный пиджак в клетку, на голове — великолепная грива огненно-рыжих волос. Обут в рыжие оксфорды, в руках — трость.
Он молча кивал, соглашаясь, и смотрел на старика, покровительственно. Улыбка застыла на его бледном и тонком лице. А когда тот воскликнул, подошёл к нему и протянул раскрытую ладонь.
Старик положил на неё её сердце, ещё не потерявшее всей теплоты жизни.
Жыжий поднял вытянутую руку, впился глазами в сердце и вдруг резко сжал руку, сдавливая его пальцами с удивительно большими и крепкими ногтями. Лицо его исказила гримасса злости, сжав зубы, он зарычал от напряжения и давил, давил, давил.
Внезапно успокоившись, небрежно швырнул кровавый комок на камни, вытер руки платком, и тут у него зазвонил телефон.
Молодой человек улыбнулся, взял трубку и молча выслушал звонившего.
К нему подошёл старик, успевший снять амулеты, вытереть руки и облачиться в просторный медицинский халат.
— Элеонора. Как я и предполагал, — утвердительно сказал молодой старому.
— Следующая, наша темнокожая малышка Элли. Профессор, подготовьте её, основываясь на предыдущем опыте. Ваше средство в сочетании с гипнозом и нейронным программированием показало себя великолепно. Добровольная жертва эффективнее. Кодекс был прав.
— Этим он замялся, подбирая слова существам, это явно понравилось гораздо больше, чем в прошлый раз, они оставили четыре, ровно в два раза больше, чем в прошлый раз.
— Посмотрите на эти великолепные камни. Они чудесны.
На его ладони лежали четыре совершенных изумруда чистой воды, каждый размером с яйцо перепелки.
— На эти камни приют для девочек «Жёлтый зонт» сможет позволить себе многое, расцветет, и мы с вами тоже, профессор.
— Не обманул нас этот водяной божок. Старик алчно потер руки. И пока мы выполняем наши обязательства по сделке, нам ничего не угрожает. Вот только душа...
— Душа? Ну какая душа может быть в наше время? Бросьте, не мешайте мне наслаждаться результатом, — раздраженно сказал молодой джентльмен.
— Я уверен, что заключил выгодную сделку, и вы, профессор, напомню, тоже. Ваша вожделенная Нобелевка не за горами...
Дерево поскрипывает старыми ветвями, шум прибоя, ветер рвёт серые облака, и луна — это уже просто луна, — начинает накрапывать дождь...