SNDINFO

Материал из DoomDev

(Различия между версиями)
Перейти к: навигация, поиск
 
-
ZDoom поддерживает особый блок, называемый «SNDINFO». Он не отличается от блока SNDINFO, используемого в Hexen, и является обычным текстовым файлом, встроенным внутрь WAD-файла. SNDINFO может состоять из двух частей: первая – устанавливает соответствия длинных имен звуков реальным блокам в WAD-е, содержащем звуки (логические звуковые отображения); вторая – определяет окружающие звуки для использования с типами предметов 14001-14065. В SNDINFO можно вводить и комментарии, обозначая их начало символами «//». Все символы от метки комментария до конца строки ZDoom-ом игнорируется. (Если вы раньше пользовались блоком SNDINFO в Hexen, обратите внимание, что здесь комментарии не начинаются с символа «;».) В отличие от Hexen блоки SNDINFO накапливаются и подлежат обработке в порядке их появления в WAD-е. Это означает, что если нужно всего лишь определить несколько окружающих звуков или переопределить несколько основных звуков игры, то необязательно повторять все содержимое блока SNDINFO файла zdoom.wad.
+
__TOC__
 +
SNDINFO содержит множество определений связанных со звуками. Этот ламп позволяет задавать соответствия имен лампов звуков (DSSAWHIT, DSBAREXP и т.д.) любым звуковым событиям, например, смерти игрока или нахождению секрета.
-
+
В отличие от Hexen в ZDoom лампы SNDINFO кумулятивны - все найденные лампы SNDINFO обрабатываются в том порядке, в котором они записаны в [[WAD]]е. Поэтому, если нужно что-то изменить, не нужно копировать все из оригинального лампа SNDINFO.
-
Формат логических звуковых отображений довольно прост и представляет собой логические имена звуков, за которыми следуют имена реально проигрываемых звуков. В качестве примера ниже приводится выдержка из блока SNDINFO файла zdoom.wad:
+
В SNDINFO можно использовать комментарии, обозначая их начало символами '''//''' (конец комментария совпадает с концом строки) или заключая их в '''/*''' (начало комментария) и '''*/''' (конец комментария). Всё содержимое комментария игнорируется. (Если вы раньше пользовались блоком SNDINFO в Hexen, обратите внимание, что здесь комментарии не начинаются с символа ''';'''.)
-
doors/dr1_open    dsdoropn
+
Поддерживаются следующие команды:
-
doors/dr1_clos    dsdorcls
+
== <логическое_имя> <имя_лампа> ==
 +
Два имени просто записываются подряд в одну строчку: логическое имя (имя звука, используемуе в командах ниже, в игре или в других лампах) и имя лампа звука.
 +
Логические имена звуков не могут начинаться с символа доллара ($), а имена содержащие пробелы должны быть заключены в кавычки ("). Логические имена звуков не чувствительны к регистру, поэтому «misc/keytry» и «Misc/KeyTry» считаются одинаковыми. Имена звуков не обязаны начинаться с символов «ds».
-
doors/dr2_open    dsbdopn
+
== $random <псевдоним> {<логическое_имя1> <логическое_имя2> <логическое_имя3> ...} ==
 +
Определяет случайный звук. Созданный псевдоним используется как и обычное логическое_имя, но для проигрывания случайным образом выбирается один из перечисленных в списке звуков. Количество звуков в списке неограничено. Обратите внимание, что соответствие логических имен в списке реальным лампам должно задаваться отдельно.
-
doors/dr2_clos    dsbdcls
+
== $alias <псевдоним> <имя_звука> ==
 +
Задает еще одно логическое имя уже определенному звуку. "Определенный звук" также может быть случайным звуком или псевдонимом. Любое изменение звука-оригинала в последующих SNDINFO автоматически производится и с новым звуком.
-
+
== $limit <имя_звука> <количество> ==
 +
Задает максимальное '''количество''' "экземпляров" звука, которое может проигрываться одновременно. 0 - без ограничения.
-
Слева – логические имена, а справа – имена представляемых ими блоков. Логические имена звуков не могут начинаться с символа доллара ($), а имена содержащие пробелы должны быть заключены в кавычки (“). Логические имена звуков не чувствительны к регистру, поэтому «misc/keytry» и «Misc/KeyTry» считаются одинаковыми. В отличие от обычного Doom имена звуков не обязательно должны начинаться с символов «ds».
+
== $pitchshift <имя_звука> <диапазон> ==
 +
Задает предел случайной вариации высоты указанного звука при проигрывании. '''Диапазон''' может принимать значения от 0 до 7.
-
+
== $pitchshiftrange <диапазон> ==
 +
Задает значение pitchshift применяемое по умолчанию ко всем нижеследующим определениям звуков.
-
Можно назначать несколько логических звуковых ссылок на один и тот же блок, я так и делал для нескольких звуков в zdoom.wad.
+
== $playerreserve <имя_звука> (устарела) ==
 +
Резервирует указанное '''имя_звука''' для использования игроком. Эта команда должна находиться перед любыми другими определениями звуков игрока и не должна использоваться в [[PWAD]]ах.
-
+
== $playersound <класс_игрока> <пол> <логическое_имя> <имя_лампа> ==
 +
Определяет звук, используемый игроком.
-
Все команды должны начинаться с символа доллара ($). В настоящее время определена только одна: $AMBIENT.
+
'''Класс_игрока''' должен быть 'player', если звук предназначен для стандартного класса игрока Doom, Strife или Heretic. Если же звук предназначен для пользовательского класса, должно использоваться значение свойства [[Classes:PlayerPawn#player.soundclass|Player.SoundClass]]. Если звук предназначен для использования [[S_SKIN|скин]]ом, должно использоваться имя скина. Кроме того, для Hexen допустимы значения 'fighter', 'mage' и 'cleric'.
-
== $AMBIENT ==
+
Пол может быть 'male' (мужской), 'female' (женский) или 'other' (другой).
-
Ambient используется, чтобы определять окружающие звуки и назначить их предметам на карте. Имеется два различных типа окружающих звуков: точечный и «мировой». Точечные звуки назначаются отдельным предметам на карте и будут слышны игроку, когда он находится недалеко от них. «Мировые» звуки слышны независимо от того, в каком месте уровня находится игрок. Чтобы использовать любой из этих типов окружающего звука в создаваемых уровнях, необходимо определить его командой $ambient в блоке SNDINFO, а также включить соответствующий предмет во все карты, где нужно использовать этот звук. В случае точечных звуков, чтобы точно определить местонахождение звука, используется соответствующий предмет. В случае «мировых» звуков, наличие предмета означает только то, что соответствующий звук будет проигрываться на этом уровне. (Поэтому в этом блоке можно определить несколько «мировых» звуков, а на каждом данном уровне проигрывать только некоторые из них.)
+
На странице [[Звуки игрока]] перечислены все звуки игрока и их назначение.
-
+
== $playersounddup <класс_игрока> <пол> <логическое_имя> <логическое_имя2> ==
 +
Задает псевдоним для уже определенном звуку игрока
-
«Мировые» звуки используются и в Heretic и в Hexen, тогда как точечные звуки являются новинкой ZDoom.
+
== $playeralias <класс_игрока> <пол> <логическое_имя> <логическое_имя2> ==
 +
Задает псевдоним для уже определенном звуку игрока
-
+
== $playercompat <класс_игрока> <пол> <логическое_имя> <совместимое_имя> ==
 +
Определяет псевдоним совмесимости для указанном звука игрока. При определении звука с данным именем совместимости, вместо этого будет переопределен соответствущий звук игрока. При проигрывании также используется соответствующий звук игрока.
-
Команда $ambient состоит из следующих шести частей:
+
== $ambient <индекс> <логический_звук> <тип> <режим> <громкость> ==
-
{|
+
-
| valign="top"| 1.
+
-
|Сама команда ('''$ambient''')
+
-
|-
+
-
| valign="top"| 2.
+
-
|Определяемый ею окружающий звук (1-64). В ZDoom можно ввести не более 64-х окружающих звуков, и чтобы указать, какой конкретно из этих звуков описывает команда, используется число от 1 до 64. Чтобы проигрывать какой-либо окружающий звук на карте, прибавьте к его номеру 14000 и полученное число используйте на своем уровне в качестве типа предмета. (Как использовать предметы, которых нет в оригинальном Doom, описано в документации вашего редактора уровней) Например, если номер звука 1, то используйте предмет 14001 везде, где нужно использовать этот звук.
+
-
|-
+
-
| valign="top"| 3.
+
-
|Логическое имя звука. Оно должно быть уже определено в логических звуковых отображениях (см. выше). Используя одно логическое имя для различных окружающих звуков, можно использовать один и тот же звук с различными параметрами. (Пример этого находится в файле demo.wad.)
+
-
|-
+
-
| valign="top"| 4.
+
-
|Тип звука. Это может быть или «'''point'''» или «'''surround'''». «'''Point'''» означает, что это точечный звук, а «'''surround'''» – что это «мировой» звук, который должен проигрываться через канал surround. Отсутствие типа будет означать, что используется обычный «мировой» звук.
+
-
|-
+
-
| valign="top"| 5.
+
-
|Определяет, как часто должен проигрываться звук. Это может быть «'''continuous'''», «'''periodic'''» или «'''random'''».
+
-
'''Continuous''' – звук должен проигрываться непрерывно (не рекомендуется для «мировых» звуков, но это значение параметра может использоваться в любом случае).
+
Определяет звук окружающего мира, проигрываемый при размещении на карте соответствующего предмета (типы 14001-14065).
-
'''Periodic''' – звук должен проигрываться через определенный интервал, указанный в секундах после слова Periodic.
+
'''Индекс''' определяет какой тип (14000+индекс) должен иметь соответствующий предмет звука или какой аргумент должен иметь соответствующий универсальный предмет звука.
-
'''Random''' звук должен проигрываться через произвольный интервал, ограниченный двумя числами, обозначающими наименьшее и наибольшее число секунд, которое должно пройти перед повторным проигрыванием звука (именно в таком порядке). Эти числа указываются после слова Random.
+
'''Логический_звук''' определяет проигрываемый звук. Используя один и тот же логический_звук для различных окружающих звуков, можно использовать один и тот же звук с различными параметрами.
-
|-
+
-
| valign="top"| 6.
+
-
|Относительная громкость звука (0,0-1,0). 0,0 – звук выключен и никогда не проигрывается. 1,0 – полная громкость. Для точечных звуков это громкость, с которой будет проигрываться звук, когда игрок стоит непосредственно у соответствующего предмета. Чем дальше от него находится игрок, тем тише будет слышен звук. Для «мировых» звуков это громкость, с которой они будут проигрываться, независимо от местонахождения игрока.
+
-
|}
+
-
+
-
Для наглядности привожу первые два определения $ambient из файла demo.wad:
+
'''Тип''' может иметь одно из следующих значений:
 +
:* point [<аттен>]
 +
::Определяет точечный звук. Громкость, с которой слышен звук уменьшается по мере удаления от источника (соответствующего предмета).
-
$AMBIENT 1 ForceFieldHum POINT CONTINUOUS 1.0
+
Опциональный дробный параметр аттен указывает с какой скоростью падает громкость по мере удаления от источника. По умолчанию - 1.0.
-
Эта строка определяет окружающий звук 1, использующий логический звук ForceFieldHum. За логическим именем следует слово «point», чтобы ZDoom знал, что это точечный звук, и он будет проигрывать его в местоположении на карте каждого предмета типа 14001 (или 14065 с первым параметром равном единице). Дальше следует «continuous», что означает автоматическое повторение звука. 1,0 в конце строки означает воспроизведение на полной громкости.
+
:* surround
 +
::Проигрывает звук через канал surround с громкостью, независящей от расстояния до предмета-источника.
-
+
:* world
 +
::Указывает, что звук проигрывается с одинаковой громкостью независимо от расстояния до предмета-источника. Ключевое слово 'world' необязательно.
-
$AMBIENT 2 Scream RANDOM 20.0 50.0 1.0
+
World-звуки были и в [[Heretic]], и в [[Hexen]], а точечные звуки являются нововведением ZDoom.
 +
 
 +
'''Режим''' может быть:
 +
:* continuous
 +
::Звук проигрывается непрерывным циклом
 +
 
 +
:* random минсек макссек
 +
::Звук проигрывается через случайные интервалы. Минимум и максимум интервала - дробные значения в секундах.
 +
 
 +
:* periodic сек
 +
::Звук должен проигрываться через постоянный интервал '''сек''', задаваемый дробным числом в секундах.
 +
 
 +
'''Громкость''' - относительная громкость звука (0,0-1,0). 0,0 – звук выключен и никогда не проигрывается. 1,0 – полная громкость. Для точечных звуков это громкость, с которой будет проигрываться звук, когда игрок стоит непосредственно у соответствующего предмета. Чем дальше от него находится игрок, тем тише будет слышен звук. Для остальных звуков это громкость, с которой они будут проигрываться, независимо от местонахождения игрока.
 +
 
 +
 
 +
== $ifdoom
 +
$ifheretic
 +
$ifhexen
 +
$ifstrife ==
 +
Нижеследующие определения до '''$endif''' обрабатываются только в соответствующей игре
 +
 
 +
== $endif ==
 +
Завершает блок '''$if*'''
 +
 
 +
== $map <номер_карты> <музыка> (устарела) ==
 +
Эта команда определяла музыку карты в [[Hexen]]. Поддерживается только для совместимости и не должна использоваться в новых проектах. Музыка карты должна определяться в лампе [[MAPINFO]].
 +
 
 +
== $musicvolume <музыка> <коэффициент> ==
 +
Задает коэффициент громкости. Используется для компенсации при использовании музыки, которая имеет другую громкость.
 +
 
 +
== $registered ==
 +
Игнорируется. Допустима для совместимости с Hexen.
 +
 
 +
== $archivepath <строка> ==
 +
На данный момент не используется.
 +
 
 +
== $mididevice <устройство> (только для [[SVN]]-версии) ==
 +
Задает устройство по умолчанию для проигрывания данного звукового файла. Может быть полезно, если он хорошо звучит только при одном из способом воспроизведения. Допустимы Timidity, Windows Synth и OPL playback (для MUS).
 +
 
 +
== Замечания ==
 +
В ZDoom поддерживаются различные звуки боли игрока в зависимости от его здоровья. Но в Doom, Heretic и Hexen был только один звук боли, поэтому в SNDINFO сделано так:
 +
$playersound player male *pain100 dsplpain
 +
$playersounddup        player male *pain75 *pain100
 +
$playersounddup        player male *pain50 *pain100
 +
$playersounddup        player male *pain25 *pain100
 +
Для *pain75, *pain50 и *pain25 вместо имени лампа использован *pain100, чтобы он проигрывался независимо от здоровья игрока. Но это, разумеется, можно изменить.
 +
 
 +
----
 +
 
 +
В [[SVN]]-версии звук боли и звук смерти может зависеть от типа ущерба. Например:
 +
$playersound          player  male    *death-fire    dsburn
 +
При нанесении ущерба игроку ZDoom сначала попробует найти звук соответствующий типу ущерба, а если такового нет, будет использован общий звук (например, *death).
 +
 
 +
== Примеры ==
 +
Данный пример делает звук смерти игрока случайным:
 +
$random pl_death { player/death1 player/death2 player/death3 }
 +
 +
player/death1 pldth1
 +
player/death2 pldth2
 +
player/death3 pldth3
 +
 +
$playersound          player  male    *death          pl_death
 +
Реально проигрывается случайный звук из набора pldth1, pldth2 и pldth3.
-
Эта строка определяет окружающий звук 2, использующий логический звук Scream. Так как тип звука опущен, то он считается обычным «мировым» звуком, слышным на всей карте. Следующая часть – «random 20.0 50.0» – означает повторное воспроизведение через временной интервал не короче 20-и секунд и не дольше 50-и секунд. 1,0 в конце строки означает воспроизведение на полной громкости.
+
{{zdoomwikibased}}{{zdoom}}

Текущая версия

Личные инструменты