Суть модификации проста: для акторов (ламп там всяких, факелов) звуки окружения добавляются элементарно; для полов/потолков тоже есть встроенные механизмы... А для текстур стен — ничего. Вообще ничего. Ни одной попытки на просторах всего Интернета.
Итак, предлагаю Вашему вниманию модификацию, которая ориентирована на заполнение последней ниши в автоматическом создании звуков окружения: для стен. Написана полностью на ZScript v2.4.0.
Далее описание идёт для базовой версии 8164bec (v0.4), если не указано обратного. Если что кардинально в последующих коммитах будет меняться — обновлю это сообщение.
Возможности:
1) Гибкий внешний (!) конфигурационный файл. Иными словами, мод без проблем можно запустить с любым Вашим уровнем, любым текстур-паком и любой другой модификацией. Главное, если текстуры меняются или появляются, то новый конфиг-связку нужно сделать. Но это нетрудно.
2) Работа на всех версиях GZDoom, выше или равной версии 3.3.0 (ниже не получится, там "level.GetChecksum()" нет): проверено на GZDoom 3.3.0, QZDoom 2.1pre, GZDoom 3.6.0, LZDoom 3.87c и GZDoom 4.7.1. (Прим.: GZDoom 4.8.1pre, похоже, не создаёт звуковые акторы при взведённом флаге "sv_nomonsters". Вряд ли что-то смогу с этим сделать, так как это крайне странно и я сомневаюсь, что проблема на моей стороне).
3) Возможность создания своих ZScript-/Decorate-акторов на линиях по тем же правилам: API прописан не только для звуков.
4) Ну, понятно, правильный спаун по заданной позиции на текстуре, с учётом смещений, флагов upper-/lower-unpegged и подобного.
5) Возможность добавлять звуки текстур на определённые уровни (по названию карты или по её хэшу) [Коммит 4c259bb].
6) Полная поддержка Doom 1, Doom 2, TNT и Plutonia [Коммиты d3ef597, 96ceec4].
7) Возможность скачать чистое ядро, без предсозданной конфигурации и без звуков — весит оно в районе пятидесяти килобайт вместе с документацией.
Временные ограничения:
Сделаю отступление: у меня появилась идея выложить модификацию до 24-го спидмаппинга, так как новый конфигурационный файл — под текстур-пак этого события — пишется просто (см. "Бонус"). В том числе и от этого появился сей жёлтый раздел.
1) Не уверен, будет ли работать корректно на 3D-секторах, так как тестировал только в Doom, Doom 2, TNT, Plutonia и некоторых ваниль-совместимых PWAD'ах.
2) Нет проверки на исчезновение текстуры (например, при опускании пола). Но нужно ли это? Не знаю, честно. Будет ли стоить овчинка выделки — ведь каждая такая проверка также занимает процент времени обработки.
3) Текущая версия отчасти техническая, поэтому в ней отсутствуют некоторые звуки, а для пары существующих громкость/коэффициент затухания прописаны не совсем реалистично. Ищу звуковых дизайнеров, так сказать!
Ограничения, которые невозможно обойти:
1) Несмотря на несколько мощных оптимизаций, обработка всех текстур на уровне всё равно занимает какое-то время.
2) Универсальная автоматика никогда не сможет сравниться с узкоспециализированной, поэтому иногда расстановка звуков может показаться нелогичной.
3) Из-за внутренней оптимизации, на которую я не в силах повлиять без переписывания кода движка семейства *ZDoom, некоторые дубликаты звуков недалеко друг от друга могут быть выгружены.
Бонус для спидмаппинга №24: конфигурационный файл. Проверить работоспособность можно здесь, так как ресурсы для Spd23 и Spd24 практически не отличаются. Запускать в следующей последовательности: сначала "spd23.wad", затем — ядро ("AutoAmbient.pk3"), потом — новый конфигурационный файл ("AutoAmbient_Spd23_Spd24.pk3").
Credits:
Идея и весь код ядра — JSO_x a.k.a. Morthimer McMare.
Видео — YURA_111, Endoomer.
Бета-тестирование и обнаружение багов — Renaul Damek, YURA_111, ika707, Endoomer.
Звуки отчасти взяты с ZDoom Community Map Project II, отчасти — с сайта zvukipro.com.
Обо всех ошибках просьба сообщать с логом. Переключать глубину логгирования можно в "Auto-Ambient options"->"Log level", сохранять лог можно или скриншотом, или через "gzdoom.exe ... -stdout > _lastrun.txt" (для Windows)/"gzdoom ... > _lastrun.txt" (для Linux/MacOS).
Если кто-то пожелает заняться звуковым дизайном, буду лишь рад.
Конструктивная критика и предложения, естественно, приветствуются.
Устаревшая и неактуальная информация:
Скрытый текст:
Видеодемонстрация v0.2a:
Нет проверки на доступное количество звуковых каналов ("snd_channels" который). Так что на каком-нибудь Doom 2 MAP24 "The Chasm" установленного по-умолчанию значения "128" не хватит. Советую сменить на хотя бы двести: "Options"->"Sound options"->"Sound channels". Добавлено с версии 276a860.
Настроек особо пока нет — только "показать/скрыть акторы" (коммит 05894f2 добавляет нормальное меню).
Не существует Википедии и инструкции по добавлению своих конфигурационных файлов (хотя работать будет, если разберётесь); API может немножко поменяться. Википедия по всему, включая настройки и создание конфигурационного файла, есть на GitHub и в архиве (с коммита 47fe93e и выше).
Ссылка обновлена. С последнего раза добавил то, что не успел к спидмаппингу: полнофункциональный логгер, нормальное меню и пара достаточно веских исправлений.
Ага, их попросту нет. Примерный план для них я подготовил, осталось доотлаживать ядро на Doom 2 и можно за остальные IWAD браться. В том же Heretic или Hexen вообще нечего озвучивать, кроме текстур воды и лавы.
Хотелось бы иметь для штатных доп.текстур, таких как wfall.
А вот это очень хорошее предложение. Сейчас можно иметь конфигурационный файл в текстур-паке (если мод будет подгружен, конфигурация будет прочитана и применена, если нет, файл проигнорируется даже оригинальным doom.exe). Но вот идея сделать наоборот -- экстраполировать на известные текстуры -- мне не пришла.
Интересно, а такие моды можно рассматривать, как accessibility-опцию? Типа если слепой чел играть в дум будет, сможет по звукам ориентироваться?
Ох, сомневаюсь... В Doom 2 половина уровней имеет от нуля до пятнадцати автоматческих акторов на всё своё немаленькое пространство. Плюс звуки из мода, как и в любом другом, проигрываются и сквозь стены. Последнее можно частично исправить, да, но, опять же, будет ли стоить игра свеч.
В саунд-дизайнера всё опять упирается. И, помимо того, можно ведь создать совершенно свой набор звуков: этот мне не до конца нравится, хотя, безусловно, атмосферы добавляет много.
Да, верно. Но — дополнительным модом, так как у меня с самого начала не было цели добавить окружение всему, ибо для этого самого остального "всего" и без меня модификаций хватает.
Суть модификации проста: для акторов (ламп там всяких, факелов) звуки окружения добавляются элементарно; для полов/потолков тоже есть встроенные механизмы... А для текстур стен -- ничего. Вообще ничего. Ни одной попытки на просторах всего Интернета.
Подниму тему, может, это мне поможет продолжить. Версия 0.4 была выложена несколько месяцев назад (её можно взять здесь, к примеру). С v0.2 произошли следующие изменения:
* Добавлена совместимость со всеми основными IWAD: первым и вторым Doom, TNT: Evilution и The Plutonia Experiment;
* Переделан и плюс-минус оптимизирован механизм появления акторов;
* Исправлена совместимость со старыми версиями движка: теперь минимальная версия GZDoom точно v3.3.0;
* Исправлена совместимость с различными модификациями. Если конфликтует -- скорее всего, проблема на стороне другого мода. Конкретно -- они не прописали там, где надо было писать, "Super.WorldTick()" или "Super.NetworkProcess()";
* Полностью доделан README на русском языке, частично -- на английском;
* Улучшено меню опций;
* Откорректированы громкость и затухание звуков. Правда, всё равно говорят, что местами слышится неестественно. Дайте мне, наконец, звукового дизайнера...
* В конфигурационном файле добавлена возможность фильтра по хэш-сумме карты (ранее был только по названию);
* Для API создан базовый класс "AutoAmbientSpawnableActor". Всё так же можно порождать любой актор, но наследованный автоматически получит ещё и угол, и указатель на линию, к которой привязан;
* Ну и исправлено некоторое количество багов, в том числе пара фатальных (спасибо YURA_111 и Endoomer).
Теперь -- по поводу следующей версии и почему её до сих пор нет.
Основная причина, помимо нехватки времени в реальной жизни -- я застопорился на выборе структуры данных для оптимального распределения акторов в неперекрывающей саму себя системе обработки. Пока что вырисовывается нечто жуткое: что-то вроде хэш-таблицы со внешней информацией о диапазонах а-ля филиппинский кроссворд и с ячейками, ссылающимися на повёрнутый на ~33° BLOCKMAP. Зато работать очень быстро будет... Если запустится...
2) Нет проверки на исчезновение текстуры (например, при опускании пола).
-- попросту непрактично и что в следующей версии это необходимо исправить. За убеждение должен поблагодарить думеров Serious_MOod и Птица Дятел.
Небольшой прогресс по v0.5 есть в ветке "optimizing". Смотреть там, правда, пока практически не на что. Из интересного обнаружил, что создание актора по дороговизне исполнения переходит все рамки дозволенного: закомментировал момент создания (все остальные алгоритмы отрабатывали) -- уровни стали загружаться мгновенно. Раскомментировал -- и опять на некоторых уровнях по четыре секунды простоя перед запуском.
Что за версию движка используешь? И какой файл скачивал -- не "AutoAmbient_v0.4_core_only.pk3" (который является чистым ядром без конфигурации и звуков)?
Попробовал заменить поиск файла конфигурации "aambient*" на другой алгоритм -- ничего путного не вышло.
Хах.
Вспоминаю, как на четвёртом уровне Final TNT DooM, когда играл с PC-Speaker'ом вместо Sound Blaster'а, слышал странные звуки, издаваемые из подвала данного уровня. Нигде подобного не встретил.
Я использую не лёгкую версию, а максимально полную, что смог найти в сети. Мой порт - GZDoom 4.8.1.
Пробовал альтернативу в виде LZDoom 3.88B, но даже в нём точно такую же ошибку в консоль выбивает.
Может где отдельно надо конфиг скачать и в папку с портом запихать, а я опять проглядел?
Я использую не лёгкую версию, а максимально полную, что смог найти в сети.
Сейчас ни на каких ресурсах, кроме GitHub, модификации и нет. Но на всякий случай в раздел со скачиванием добавил прямые ссылки на релизную версию 0.4 (её советую перекачать и попробовать заново запустить), а также на последнюю нестабильную версию.
RastaManGames, уточнение: под каким IWAD ты его запускаешь? Конечно, крайне косвенный признак, но по фону того скриншота -- это вроде как ни один из поддерживаемых на данный момент IWAD (Doom, Doom 2, TNT: Evilution, The Plutonia Experiment). Если что, я когда-то честно попытался найти текстуры для Heretic и Hexen, на которые можно было бы прикрепить звуки, однако потерпел неудачу -- обнаружил только водопады, у которых ещё даже для Doom звуков нет.
В любом случае, если используется что-то вроде Heretic, Hexen или Strife -- приношу свои извинения. Для v0.5 у меня уже есть идеи, что, помимо звуков, можно добавить к тем же ныне глухим и безэмоциональным готическим стенам.
Добавлено спустя 29 минут 39 секунд:
Обновил репозиторий, теперь при ошибках должен выдавать ещё тип игры и состояние некоторых других доступных переменных (всё для меня).
А-а-а-а-а... IWAD...
У меня так называемый "Doom_Complete.pk3", созданный WAD Smoosh'ем.
Это, в общем, Doom 1 + Doom 2 + Plutonia + TNT + NRFTL + Master Levels.
Перешёл на него, ибо он один весит в разы меньше, чем все эти IWAD'ники по отдельности.
Да и его советовал автор мода "War Trophies", чтобы между IWAD'ам прогресс не терять.
Блин, отвязать бы мод от IWAD'ов и просто позволить ему смотреть на весь спектр текстур.