SNDSEQ
Материал из DoomDev
(Различия между версиями)
Текущая версия (20:30, 14 февраля 2008) (просмотреть исходный код) (TODO: check diffs between zdref & zdwiki) |
|||
- | + | __TOC__ | |
- | + | SNDSEQ предназначен для создания последовательностей звуков. Это текстовый накапливающийся ламп, поэтому в [[WAD]]е может содержаться два блока SNDSEQ и оба они будут использоваться. | |
- | Последовательности звуков могут быть назначены двум различным классам: дверям и платформам. Звуки дверей используются для дверей и движущихся полиобъектов, а звуки платформ используются для всего остального, что включает в себя движущийся сектор. Кроме того, можно создавать последовательности, не принадлежащие ни к одному из этих классов и доступные только с помощью | + | Последовательности звуков могут быть назначены двум различным классам: дверям и платформам. Звуки дверей используются для дверей и движущихся полиобъектов, а звуки платформ используются для всего остального, что включает в себя движущийся сектор. Кроме того, можно создавать последовательности, не принадлежащие ни к одному из этих классов и доступные только с помощью функции ACS [[SoundSequence]]. |
- | + | По умолчанию, последовательность звуков, проигрываемая при движении сектора, определяется спецификатором, используемым для активации сектора. Такое поведение можно изменить, размещая один из предметов последовательностей звуков (1400-1411) внутри соответствующего сектора или используя спецификатор [[Sector_ChangeSound]], чтобы изменить последовательность звуков сектора сразу после загрузки уровня. | |
- | + | ||
- | По умолчанию, последовательность звуков, проигрываемая при движении сектора, определяется спецификатором, используемым для активации сектора. Такое поведение можно изменить, размещая один из предметов последовательностей звуков (1400-1411 | + | |
- | + | ||
- | + | ||
Последовательности звуков определяются при помощи простого, но мощного языка. Каждая последовательность начинается с двоеточия, за которым следует её имя, а заканчивается командой end. Между ними может находиться любое количество команд, управляющих воспроизведением звуков. Ниже приводится общий формат последовательности звуков: | Последовательности звуков определяются при помощи простого, но мощного языка. Каждая последовательность начинается с двоеточия, за которым следует её имя, а заканчивается командой end. Между ними может находиться любое количество команд, управляющих воспроизведением звуков. Ниже приводится общий формат последовательности звуков: | ||
end | end | ||
- | + | Если планируется использовать эту последовательность не только при помощи команды [[SoundSequence]], следует назначить ей как минимум один ID при помощи команды '''door''' или '''platform''' (или обоими). ZDoom понимает следующие команды: | |
- | + | == play <звук> == | |
- | + | Проигрывает указанный звук | |
- | + | == playuntildone <звук> == | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | Проигрывает указанный звук и, прежде чем переходить к следующей команде, ждет его окончания. | |
- | + | == playtime <звук> <тики> == | |
- | + | Проигрывает указанный звук и, прежде чем переходить к следующей команде, ждет указанное число тиков. | |
- | + | == playrepeat <звук> == | |
+ | |||
+ | Постоянно проигрывает указанный звук, пока последовательность звуков не будет остановлена. После этой команды игнорируются все команды, кроме '''stopsound'''. | ||
+ | |||
+ | == playloop <звук> <тики> == | ||
+ | |||
+ | Многократно проигрывает указанный звук, ожидая прохождения указанного числа тиков, прежде чем начать проигрывание звука заново. Если число тиков больше, чем время проигрывания звука, то эта команда работает в точности как '''playrepeat'''. Как и в случае '''playrepeat''' выполнение этой команды прекращается только при окончании воспроизведения последовательности звуков. | ||
+ | |||
+ | == delay <тики> == | ||
+ | |||
+ | Прежде чем переходить к следующей команде, ждет указанное число тиков. В течение этого времени воспроизведение текущего звука будет продолжаться, но не будет повторяться, если закончится раньше. | ||
+ | |||
+ | == delayrand <минимальное> <максимальное> == | ||
+ | |||
+ | Ждет случайное число тиков, прежде чем переходить к следующей команде. | ||
+ | |||
+ | == volume <уровень> == | ||
+ | |||
+ | Устанавливает уровень громкости, с которым будут проигрываться дальнейшие звуки этой последовательности. Диапазон громкости: 0-100, где 100 по умолчанию. | ||
+ | |||
+ | == attenuation <тип> == | ||
+ | |||
+ | Указывает, как ослабляются звуки, проигрываемые после этой команды. Ниже описаны возможные типы: | ||
+ | *'''normal''' | ||
+ | *'''idle'''<br>Звук рассматривается как обычный. По умолчанию. | ||
+ | *'''static'''<br>Громкость звука очень быстро снижается с увеличением расстояния от источника | ||
+ | *'''none'''<br>Звук слышен в полную громкость на всем уровне | ||
+ | *'''surround'''<br>Звук слышен в полную громкость по каналу surround | ||
+ | |||
+ | == door <ID> == | ||
+ | |||
+ | Относит последовательность к классу дверных. <ID> – число от 0 до 63 включительно, используемое для идентификации последовательности при определении полиобъекта или назначении сектору нестандартного звука. Одна последовательность может быть назначена нескольким ID путем указания в этой строке нескольких ID. | ||
+ | В Hexen первые 10 последовательностей предопределены, поэтому там ID должен быть больше 10. | ||
+ | |||
+ | == platform <ID> == | ||
+ | |||
+ | Относит последовательность к классу платформенных. <ID> – число от 0 до 63 включительно, используемое для идентификации последовательности при назначении сектору нестандартного звука. Одна последовательность может быть назначена нескольким ID путем указания в этой строке больше одного ID. | ||
+ | |||
+ | == environment <ID> == | ||
+ | |||
+ | Относит последовательность к классу звуков среды. На данный момент не используется. | ||
+ | |||
+ | == stopsound <звук> == | ||
+ | |||
+ | Указывает, какой звук будет проигрываться, когда последовательность остановится. Эта команда также останавливает дальнейшее выполнение скрипта, поэтому должна быть последней командой перед оператором '''end'''. | ||
+ | |||
+ | == nostopcutoff == | ||
+ | |||
+ | Используйте эту команду, если нежелательно не только проигрывание какого-либо звука в момент остановки последовательности, но и внезапное прерывание текущего звука. Эта команда и '''stopsound''' взаимно исключающие, поэтому в одной последовательности можно использовать только одну из них. | ||
+ | |||
+ | == Замечания == | ||
+ | |||
+ | ID дверей и платформ рассматриваются, как разные, поэтому одна последовательность может быть назначена дверному ID 0, а другая – может быть назначена платформенному ID 0. Какая из них будет проигрываться, зависит от того, какой спецификатор используется, чтобы активировать соответствующий сектор или полиобъект. При движении полиобъектов всегда проигрывается дверная последовательность. азличные спецификаторы '''Door_''' также проигрывают дверные последовательности. Все остальные проигрывают платформенные последовательности. Если нужно, чтобы одна и та же последовательность проигрывалась для конкретного ID независимо от способа активации, необходимо использовать и команду '''door''' и команду '''platform''', указав одинаковые ID. | ||
+ | |||
+ | == Примеры == | ||
:ScaryDoorSound | :ScaryDoorSound | ||
stopsound cyber/death | stopsound cyber/death | ||
end | end | ||
+ | Этот звук будет назначен сектору, содержащему предмет 1400 или имеющему спецификатор [[Sector_ChangeSound]](tag, 0), и будет проигрываться всегда, когда сектор-дверь открывается или закрывается. Когда такая дверь начинает движение, проигрывается звук, издаваемый кибердемоном при обнаружении врага. Когда дверь продолжает движение, проигрывается звук шагов кибердемона, а когда дверь останавливается, проигрывается звук, издаваемый кибердемоном при его гибели. И хотя это не очень полезный звук двери, он демонстрирует, как использовать последовательности звуков. | ||
+ | Непрерывно проигрывает звук: | ||
+ | :CeilingNormal | ||
+ | playrepeat plats/pt1_mid | ||
+ | end | ||
+ | |||
+ | Проигрывает звук при остановке последовательности: | ||
+ | :CeilingSemiSilent | ||
+ | stopsound plats/pt1_stop | ||
+ | end | ||
+ | |||
+ | Проигрывает звук один раз и не прерывает его при остановке последовательности | ||
+ | :DoorOpenNormal | ||
+ | play doors/dr1_open | ||
+ | nostopcutoff | ||
+ | end | ||
+ | |||
+ | Непрерывно проигрывает звук. При остановке последовательности проигрывает другой | ||
+ | // plays a sound repeatedly and | ||
+ | // another sound when it is terminated | ||
+ | :Floor | ||
+ | playrepeat plats/pt1_mid | ||
+ | stopsound plats/pt1_stop | ||
+ | end | ||
+ | |||
+ | Начинает с одного звука, если он завершился зацикливает другой, а при остановке проигрывает третий. При использовании для дверей эта последовательность имеет номер 0 | ||
+ | :Seq1Door | ||
+ | door 0 | ||
+ | playuntildone Door1BEG | ||
+ | playrepeat Door1MID | ||
+ | stopsound Door1END | ||
+ | end | ||
+ | То же, что выше, но это последовательность с номером 1 для платформ | ||
+ | :Seq2Plat | ||
+ | platform 1 | ||
+ | playuntildone Plat1BEG | ||
+ | playrepeat Plat1MID | ||
+ | stopsound Plat1END | ||
+ | end | ||
- | + | {{zdoom}}{{zdoomwikibased}} |