Решил использовать для создания дождя скрипт отсюда: https://forum.zdoom.org/viewtopic.php?t=70432 Но возникла проблема: звук дождя слышен везде. Да, он приглушается в секторах без неба, но проблема в том, что в некоторых помещениях его не должно быть слышно вообще. Можно ли такого добиться?
уж пардоньте за каламбур но блэт, не мог упустить возможность кринжануть.
Громкость дождя *ПАУ*
Радость вождя *ПАУ*
И вновь паранойя восходит на троооон! *УАУ*
Громкость дождя
Безысходность полдня
И сегодня мыыыыы есть княааааазь!
шиза крепчала, да.
Теперь по сабжу.
по идее можно, но для этого насколько понимаю необходимо прописывать кастом-проперти звука для конкретных секторов, иначе звук так и будет везде где только можно.
Но возникла проблема: звук дождя слышен везде. Да, он приглушается в секторах без неба, но проблема в том, что в некоторых помещениях его не должно быть слышно вообще. Можно ли такого добиться?
Насколько помню, Universal Rain and Snow в этом плане очень сильно ограничен, он проверяет только условие "Под небом"/"Под твёрдым потолком" (по крайней мере так было в тех версиях, которые я видел), и под потолком звук просто в два раза тише. Так что, если с тех пор ничего не изменилось, то либо городить дополнительную математику, либо, как сказал TheTainedSlav, вводить пользовательские свойства секторов и буферную зону для звука, чтобы дождь при заходе в здание затухал постепенно, а не резко отключался рубильником.
Как вариант на рассмотрение, есть временно замороженный проект https://github.com/MorthimerMcMare/weathremum/ (я к нему обязательно вернусь и переделаю в человеческий вид) — в нём, грубо говоря, громкость звука рассчитывается на основе расстояния от ушей игрока до пола ближайшего сектора под открытым небом. В качестве легко реализуемого бонуса там есть дифференциация звука в зависимости от поверхности под небом — недалеко от воды один звук и эффект падения капель, на траве другой, на металле третий, при движении они все мягко сменяют друг друга и уходят в тишину, если рядом нет секторов, в которых идёт дождь. С него тоже что-то можно взять, ту же математику расчёта расстояния...
В качестве легко реализуемого бонуса там есть дифференциация звука в зависимости от поверхности под небом — недалеко от воды один звук и эффект падения капель, на траве другой, на металле третий, при движении они все мягко сменяют друг друга и уходят в тишину, если рядом нет секторов, в которых идёт дождь.
Как вариант на рассмотрение, есть временно замороженный проект
1) КРУТО!!!
2) Так а что, в Гоззе до сих пор нормальный дождь не сделали?
Такие вот "парадоксы" иногда возникают, когда есть много возможностей, как, например, в GZDoom/UZDoom (и, как некоторый побочный эффект, завышенные ожидания).
Если вдруг этого окажется недостаточно, а вариант, предложенный JSO x, окажется тяжеловат (будет тормозить), то предлагаю следующее простое обобщение минималистичного варианта. Сделать, чтобы были сектора трёх типов:
1) - где идёт дождь, и там громкость дождя полная.
2) - секторы, окружающие область с дождём ("рядом с небом"). В этих секторах громкость уменьшенная. Эти секторы маппер должен будет отметить сам, типа поставить галочку (иначе в некоторых случаях может получиться кривовато).
3) - все остальные секторы - там никакого звука дождя просто нет.
Плюс, можно сделать изменение громкости при переходе между секторами разных типов не мгновенным, а плавным во времени (скажем, громкость меняется градиентом в течение полсекунды).
Думаю, это хороший рабочий вариант.
Если вдруг будет представлять затруднение ввести новое свойство сектора, включаемое галочкой, можно пойти по пути либо формата MBF21, где есть обобщённые свойства секторов (как, например, Kill Players), либо по ещё чуть более древнему - ввести объект (Thing) специального типа. Объект ставится в сектор (или несколько секторов). Если в том же секторе оказывается игрок, происходит определённое действие (например, включается звук дождя половинной громкости).
у меня такой дождь
я сделал по-тупому, дождинки спавнятся в неком радиусе вокруг игрока в секторах с небом
считаю количество дождинок на карте и умножаю на громкость постоянно существующего звука
Скрытый текст:
да, надо бы сделать множитель более инертным, чтобы убрать резкие переходы
2) Так а что, в Гоззе до сих пор нормальный дождь не сделали?
Ну, когда-то в Сети были представлены три универсальных мода на дождь, и ни один меня не устраивал. Я решил сделать свой. Теперь в Сети есть четыре универсальных погодных мода, и ни один меня не устраивает :) .
Если вдруг этого окажется недостаточно, а вариант, предложенный JSO x, окажется тяжеловат (будет тормозить)
На всякий случай, да, это глубокая ветка разработки, и оптимизаций там пока особо и нет. Как не первый раз выясняется на горьком опыте, который стоил уже минимум двух загубленных проектов, преждевременная оптимизация — зло, и искать баги в уже хитро оптимизированном коде становится куда труднее.
Интересно, сейчас проверил — на UZDoom 4.14.3 почему-то всё работает в два раза медленнее, чем на LZDoom 3.87. Снова в движке что-то сломали... Так, тогда ещё советую посмотреть ветку multiplayer — из-за асинхронного рандомайзера мод на ней должен работать быстрее основной ветки.
Если потребуется, можно заменить дождинки с наследования от Actor на наследование от VisualThinker (когда начинал делать, последнего ещё не существовало), а карту определения "текстура пола ↔ вид дождя" — на HashMap, самодельный или встроенный (встроенного тоже тогда не было, о своём в тот момент как-то не подумал). Дальше уже по обстоятельствам, надо смотреть на итоговую производительность.