Soundscapes
Предисловие
   Этот тютор научит Вас делать все виды Soundscape'ов и прописывать скрипты для них.Особенно этот тютор полезен тем кто хочет вставить на свою карту loop'енную музыку, воспроизводящуюся каждый раунд, но у него мало что получается.Также в конце я приведу дополнительный способ.
   Разбираться со Soundscape'ами будем в Counter-Strike Source, т.к. в нём есть кое какие ограничения, которые по ходу объяснения я вам покажу, а так, что для Халвы, что для Сорса без разницы.
  И так приступим.

   Soundscape'ы служат для создания звуков на карте и звуковых эффектов их воспроизведения (в основном разного рода эхо имитирующего атмосферу).Принципы действия всех Soundscape'ов основаны на том, что при прохождении через область их активации (это может быть сфера у точечных и разной формы у брашевых) вы запускаете скрипт.В параметрах скрипта указаны эти самые звуки, параметры их воспроизведения, эффекты и др.После активации скрипта начинают играть те звуки, которые прописаны именно в нём, и продолжают играть до активации другого Soundscape'а (к звукам от ambient_generic это не как не относится, они вообще здесь ни причём и будут играть так как они играли раньше).

  Звуки в Soundscape'ах могут быть 2-ух типов:
  1.   Позиционированные - имеющие определённое место в пространстве, радиус воспроизведения и громкость.Они являются аналогами ambient_generic с обычными параметрами и служат для их замены.Место их воспроизведения указывается в параметрах Soundscape'а с помощью info_target'а.Всего таких точек в одном Soundscape'е может быть 8 (от 0 до 7).
  2.   Звуки общего воспроизведения - играют в любой точке карты.Они похожи на ambient_generic с галкой на "Play everywhere".Имеют только громкость воспроизведения.Далее я буду их писать как ЗОВ.
Дополнительное деление на типы будет рассмотрено в главе скрипты.

Soundscape'ы
   И так сами Soundscape'ы
  Как многие знают существует 3 вида точечных Soundscape'ов и 1 брашевый, из которых:
   env_soundscape; env_soundscape_proxy; env_soundscape_triggerable - точечные, и trigger_soundscape - брашевый.

   Env_soundscape - это самый распространённый Soundscape, проходя через его радиус активации, вы его активируете, и начинают работать те звуки, которые прописаны в скрипте.Его недостаток это то, что область активации задаётся радиусом, что бывает не удобно, а за частую и вообще не пригодно.

  Его параметры:
  Start Disabled - сначала выключен (в начале раунда не активен). [Yes/No]
  Radius - радиус активации Soundscape'а [Unit]
  Soundscape - название Soundscape'а написанного в скрипте (об этом в параграфе о скриптах)
  Sound Position 0-7 - это именно те позиции о которых говорилось в параграфе о звуках.Чтобы всё сделать правильно сначала поставьте info_target'ы в те места, где у вас будут играть звуки, дайте info_target'ам имена, а потом выберите их здесь.Запомните, что номер позиции указывает, какой именно звук будет проигрываться, эти же позиции должны прописываться в скрипте.
  Флаги:
   нету

   Env_soundscape_proxy - это как бы клон env_soundscape, он берёт все параметры указанные у env_soundscape, и работает, сними. Активируется точно так же, как и env_soundscape.Служит для уменьшения времени построения карты, путём уменьшения прописывания параметров.Для тех кто не понял, объясню на пальцах (немного дальше).

  Его параметры:
  Soundscape Entity - здесь выбирается имя того Soundscape'а у которого хотим клонировать параметры, предварительно конечно же надо ввести имя тому Soundscape'у у которого хотим взять параметры(примечание: Soundscape'ами для клонирования могут быть (только) env_soundscape (за другие не ручаюсь) да другие и клонировать не нужно).
  Radius - тот же радиус активации [Unit]
  Флаги:
   нету
   Env_soundscape_triggerable - это полный аналог env_soundscape, за исключением того, что он служит для обеспечения работоспособности trigger_soundscape.Сам по себе имеет очень малую вероятность срабатывания, по этому на него не стоит сильно расчитывать (но ставить для trigger_soundscape'а ОБЯЗАТЕЛЬНО!).А для повышения вероятности срабатывания надо использовать схему когда env_soundscape_triggerable находится в нутри trigger_soundscape'а - эта схема будет и в примере.

   Trigger_soundscape - работает по принципу env_soundscape_proxy.Но он предпочтительнее по сравнению со всеми предыдущими Soundscape'ами, т.к. он более позиционированный, т.е. может обхватить конкретное пространство (на пальцах объясню дальше в примере).Параметры берёт только у env_soundscape_triggerable у env_soundscape не хочет брать ни в какую, следовательно необходимо на зону поставить этот самый env_soundscape_triggerable.Мой совет пользоваться только этим Soundscape'ом в связке с env_soundscape_triggerable, ну а там вам уже решать, что вы будете использовать.

  Его параметры:
  Start Disabled - сначала выключен (в начале раунда не активен). [Yes/No]
  Soundscape Entity - здесь выбирается имя того env_soundscape_triggerable у которого хотим клонировать параметры,предварительно конечно же надо ввести имя тому env_soundscape_triggerable'у у которого хотим взять параметры(примечание: Soundscape'ами для клонирования могут быть только env_soundscape_triggerable т.к. они предназначены именно для trigger_soundscape).
  Флаги:
   Во флагах написаны все возможные способы активации триггера, на этом обострять своё внимание не будем т.к. это описано в других тюторах именно о триггерах, а у нас тютор о Soundscape'ах.Скажу лишь, что для КСа нужна только первая галка на Clients.
    (Чтобы мы делали без ctrl+c и ctrl+v? 8-)

  Важные примечание ко всем выше изложенным Soundscape'ам:
  1.   Поле Name во всех Soundscape'ах я думаю все знают за чем, его заполнение естественно не обязательно и фактически нужно только для env_soundscape и env_soundscape_triggerable чтобы клонировать его параметры,ну и возможно включать и выключать их (если вам это вдруг понадобится B-).
  2.   А вот на счёт Parent'а всё гораздо сложнее. Помните я в начале тютора упомянул, что у Сорса есть "кое какие ограничения", так вот это оно и есть.Во-первых Soundscape не может двигаться в КСе, а во-вторых не могут двигаться звуки тобишь info_target'ы.Конечно если не верите можете проверит (я убедился в этом когда задал парэнт звуку музыки на своей карте и звук исчез а все другие звуки в Soundscape'е играли).Вообще на счёт парэнтов в КСе стоит упомянуть то, что они практически ни где не работают (ограничение для уменьшения лагов при игре по сети), по этому в КСе в основном всё статичное,а динамичное практически не используется - запомните это при разработке новых карт.К Half-Life'у это не относится у него полная физика и там можно вытворять всё, что душе угодно.
  3.   Все остальные не разобранные параметры к тютору о Soundscape'ах не относятся и рассматриваться не будут. И так уже чуть ли ни поэму написал.
  Остальное можно узнать на этом сайте:
 http://www.hl-inside.ru/
  И на этом тоже много чего есть, особенно на форумах:
 http://cs-mapping.com.ua/

Пример
   Ну а вот тот долгожданный пример в котором я на пальцах объясню, как всё это работает, что я описал выше.Для разбора примера вам понадобится вот этот архив (VM: этого примера нету на самом сайте, откуда я взял его :)), в котором находится карта пример и её исходник, описывать я буду её по этому качайте.
   У нас есть дом (у Вас же это может быть всё, что угодно - бункер, склад и т.д., принцип один и тот же) и двор вокруг него, т.е. у нас две области: наружная и внутренняя и несколько проходов между ними (окна и двери).
   Итак начнём разбирать, опять же с env_soundscape. (Ниже в квадратных скобках я буду указывать какое название Soundscape'а указывалось в примере и пишется в скрипте. У вас же могут быть и другие названия, какие вам хочятся, главное чтобы они были без пробелов и ТОЛЬКО на АНГЛИЙСКОМ. Их количество также не ограниченно).
 Env_soundscape'ов у нас стоит два штуки - это (10) и (5)
   10 - [snaruji] Soundscape имеющий два позиционированных звука (6) - нерабочий (из-за того, что его таржет имеет Parent'ом физическую, тобишь двигаемую, канистру) и (7) - полностью рабочий звук горения (костра).Принадлежность target'а к Soundscape'у обозначена синими линиями.Также у него есть ЗОВ ветра, но об этом в главе о скриптах.
   5 - [vnutri] Soundscape - нерабочий, по причине всё того же Parent'а!, но имеющий все остальные правильные параметры, включая target в виде лампочки (4).Сделан с целью показать ошибку зачастую допускаемую по незнанию свойств КСа.
 Env_soundscape_proxy один (11)
   11 - Soundscape копирующий параметры у (10)-ого [snaruji] Soundscape'а.Заметьте что после прохождения через него всё остаётся таким же как и у (10)-го Soundscape'а, и не проходя через другие Soundscape'ы можно подойти к огню и слышать его звук.
 Env_soundscape_triggerable два - (1) и (2)
   1 - [vnutri] Soundscape предназначенный для копирования параметров (12)-ым trigger_soundscape.В его параметрах нулевой позицией стоит лампочка за место target'а (пример использования нестандартного target'а) (не забывайте ставить target'ы).На нём показан пример схемы когда env_soundscape_triggerable находится внутри trigger_soundscape, что в основном желательно (но не обязательно) делать, для повышения вероятности срабатывания второго.
   2 - [snaruji] Soundscape работающий, как обычный env_soundscape и также дающий свои параметры (3) и (13) trigger_soundscape'ам.Его параметры такие же, как и у (10)-ого [snaruji] Soundscape'а, позициями стоят два таржета, хотя соединения и не отображаются в Хамере, но они есть.Очень малоколичественная (во завернул, сам еле понял чё написал :-) схема расположения Soundscape'ов не друг в друге, которая хоть на первый взгляд и работает без ошибок но не срабатывает на все 100.А может быть я просто суеверен… , или наоборот всё ставлю под сомнение? - не важно, пользуйтесь если вам так нравится.
 Trigger_soundscape'ов целых три штука (3), (12) и (13).
   3 - Soundscape берущий параметры у (2)-ого [snaruji] Soundscape'а.
   12 - Soundscape берущий параметры у (1)-ого [vnutri] Soundscape'а.
   13 - Soundscape берущий параметры у (2)-ого [snaruji] Soundscape'а.
  Как Вы заметили (3) и (13) охватывают окна в плотную и не допускают мест где бы можно было пройти не активировав Soundscape.

 Общие советы:
  1. Как я уже упомянул выше, на мой взгляд лучшей схемой является trigger_soundscape в связке с env_soundscape_triggerable.Как вы все можете заметить переход между (11) и (12) подтупливает, а вот переход между (12) и (13) работает превосходно.Следовательно когда вы делаете дверь или окно надо с одной стороны ставить один trigger_soundscape, а с противоположной другой.
  2.   Также по примеру (2)-ого Soundscape'а и по моему собственному опыту я вам сейчас приведу наилучшую (опять же на мой взгляд) схему.
       Например, у нас терроры появляется в помещении, а контры на улице. Тогда ставим на месте появления терроров env_soundscape_triggerable с внутренним Soundscape'ом ,а у контров с наружным.А у окон и дверей по два trigger_soundscape'а с параметрами соответствующими внутреннему и наружному env_soundscape_triggerable стоящими на местах респаунов.
       Также ещё один плюс такой схемы состоит в том что если например у вас на одной стене стоит много открытых окон вы сможете растянуть 1 браш на все окно, а если бы вы ставили env_soundscape_proxy,то вам пришлось бы ставить их возле каждого окна, чтобы сфера образуемая радиусом активации охватила полностью окно.
  3. Побегав по зоне вы сможете понять, что работает, а что нет, и какой вариант лучше именно для Вас.
   Я надеюсь в зоне-примере разобрал все возможные варианты расстановки Soundscape'ов, как правильные так и нет.Если вдруг у вас возникли вопросы не освещённые в тюторе или вы знаете что-то ещё - пишите мне.

Скрипты
   По идее скрипт должен прописываться во время расстановки Soundscape'ов на карте, а ещё лучше заранее,во время рисования карты на последней страницы тетрадки по Математики или Сопромату (в зависимости от того кто где сейчас учится),но это не главное, главное то чтобы всё правильно прописать в скрипте и не забыть все нужные звуки на позициях и общего воспроизведения.Я же написал главу о скриптах последней ввиду её сложности понимания для новичков мэппинга, и необходимости понять принцип действия Soundscape'ов до заполнения скриптов.Сам то я пишу скрипт уже после расстановки Soundscape'ов на зоне, но я то уже имею в этом довольно таки большой опыт, а вам чтобы не допускать ошибок лучше всё делать по правилам.
   Для начала необходимо понять главное - это то, что скрипты для Soundscape'ов не совсем скрипты в обычном понимания геймера, это скорее параметры звуков, чем команды для игры.Так что не стоит сразу пугаться громкого слова СКРИПТ!Его параметры по заполнению полностью похожи на материалы движка Source.И так перейдём непосредственно к созданию и заполнению.
  1.   С начала нам надо создать файл скрипта.Для этого создаём текстовый файл (надеюсь все знают как ЭТО сделать) в папке scripts которая должна лежать в папке cstrike, если такой папки нет - создаём её.Именуем наш текстовый файл как soundscapes_XXX.txt где XXX название вашей карты (полностью, с префиксом и без расширения).
  2.   Теперь открываем новый файл и в начале пишем копирайт через двойной // (Обязательно!!!, без него не будет работать ни в какую)*
  3.   Пишем в кавычках название Soundscape'а в нашем примере это "snaruji" или "vnutri" зависит от того с чего вам охота начать.Это именно тот параметр который указывается в Soundscape'ах в строке Soundscape.
  4.   После названия пишется DSP-эффект (также в кавычках), т.е. эффект окружения который будет применятся для всех звуков. Обычно это Эхо-о-о разной силы, времени возврата звука и др. параметров эха.Номера эффекта можно прочитать в soundscapes_manifest.txt, который находится в этой же папке если у вас его нет значит у вас лицензионка и файл запакован в GCF'ке (как вытаскивать файлы из GCF'ки не для этого тютора).Для тех кто не решается какой эффект ставить Valve предусмотрело эффект №1, который подбирает в самой игре эффект уже по самой местности - очень реалистично (советую).Тем кому не нужен эффект эхо может поставить "0" и ни каких эффектов не будет.

        Небольшое отступление перед следующим абзацем:
      В скриптах также идёт деление, кроме позиционированного и ЗОВ, на loop'ленные и выборочного воспроизведения.Надеюсь loop'ленные звуки все знают, … а вот на звуки выборочного воспроизведения стоит обратить внимание.
      Звуки выборочного воспроизведения - это набор звуков хаотично воспроизводящихся, через определённое или также хаотичное в установленных интервалах время.Немного позже разберём эти параметры. В дальнейшем я решил писать их как ЗВВ.

  5.   Открываем первую фигурную скобку и пишем в кавычках "playlooping" для звука воспроизводящегося loop'ленно, и "playrandom" для ЗВВ.
  6.   Открываем вторую фигурную скобку и пишем:

        Здесь я опишу основные параметры звуков.
      "volume" - громкость воспроизведения, может иметь минимальное и максимальное значение для ЗВВ,для loop'ленного одно (обычно одно, но вы можете попробовать поставить также минимальное и максимальное, посмотрите может что и получится?В примере у огня например стоит, но изменения звука я не заметил.)
      "pitch" - скорость воспроизведения, параметров также может быть два и одын.
      "position" - номер позиции для позиционированного звука в Soundscape'е. Возможные значения от 0 до 7.
      "soundlevel" - уровень звучания для позиционированного звука измеряемый в Децибелах. Возможные значения написаны в том же soundscapes_manifest.txt.Аналог параметра Max Audible Distance в ambient_generic. Принцип его измерения, если честно говоря, я не очень то и понял.Чтобы примерно понять как он работает надо немного поэкспериментировать с этим параметром.
      "wave" - полное имя и путь для loop'ленного звука.
  7.   Для ЗВВ пишем "rndwave" и открываем ещё одну фигурную скобку и также как и для loop'ленного звука вставляем уже не один, а несколько (сколько нам надо) "wave", и закрываем фигурную скобку.
  8.   Закрываем фигурную скобку для звука в общем.
  9.   По необходимости пишем ещё несколько звуков по пунктам 5 - 8. Закрываем общую фигурную скобку для Soundscape'а.
  10.   По выше описанным 9 пунктам заполняем ещё нужное количество Soundscape'ов.
  11.   Закрываем и сохраняем скрипт. Всё.
   Читая вышеизложенные пункты лучше всего смотреть на пример скрипта.

Дополнительный способ
(вставки loop'ленной музыки)
   За дополнительный способ спасибо Hellsing'у который разобрался и рассказал мне как сделать с помощью 2-х ambient_generic'ов и одного logic_auto возможным воспроизведение звука не только в первом раунде, но и во всех остальных.Этот способ понадобится тем кто не понял всё выше прочитанное или не хочет из каких либо побуждений ставить на свою карту Soundscape'ы.
   В карте-примере вы наверняка заметили 2 ambient_generic'а. Так вот, чтобы у вас на карте стоял "звук" воспроизводящийся каждый раунд и играл loop'ленно надо:
  1.   Поставить один ambient_generic с обычными параметрами для loop'ленного звука воспроизводящегося с начала раунда, т.е. убрать все галки во флагах.
  2.   Поставить второй ambient_generic с теми же параметрами, но во флагах поставить галку на Start Silent, чтобы он не играл до его активации каким либо Output'ом.
  3.   Поставить logic_auto (местоположение его безразлично) и сделать Output ко второму ambient_generic'у
  My Output - OnNewGame - При старте новой игры
  Target Entity - music_01 - Имя вашего звука
  Target Input - PlaySound - Проиграть звук
  Parameter - Нету
  Delay - 1.00 - с задержкой в 1 секунду (на всякий пожарный)
  Only Once - No - Не только один раз
   Принцип работы всей этой байды заключается в том, что в первый раунд срабатывает первый ambient_generic, т.к. у него нет галки на Start Silent, в то время как второй ambient_generic не срабатывает.Во втором раунде всё происходит с точностью до наоборот, т.е. уже первый ambient_generic не срабатывает (в виду всё тех же глюков КСа), а второй срабатывает от Output'а и играет за место первого.
   Следовательно переосмыслите всё прочитанное выше и сделайте такой вывод, что оба ambient_generic'а должны стаять как можно ближе, если не друг на друге для имитации одного звука.У меня же в примере на карте они стоят порознь - лишь с той целью, чтобы показать как срабатывает сначала один затем второй.Я не знаю как долго продержится этот глюк в КСе, исправят его или нет, и по этому не советую им пользоваться.


   * Для тех кто не понял это шутка была (смешная :-). И писать конечно не обязательно. Вообще после // можно писать всё, что душе угодно и игрой оно не будет обрабатываться.

Источник: TMC

CMT (CS Mapping Tutorials) - © 2006-2011+. Created by VM
[ Script Execution time: 0.005 ]