WarCraft 3: Нестандартные звуки анимаций

» Раздел: Моделлинг
» Автор оригинала: Monoroh

О статье

Доброго времени суток, уважаемые пользователи XGM!
В данной статье мы подробно рассмотрим как прикрепить к анимациям модели нестандартные звуки. План:
  1. Выбор модели и анимаций.
  2. Выбор звуков и конвертирование их в корректный формат.
  3. Работа с таблицами AnimLookups.slk и AnimSounds.slk.
  4. Присоединение звуков к анимациям.
  5. Импорт в игру.
(Весь используемый мной материал).
Ну что, приступим!

Подготовка

Используемые программы:

  1. Любой MPQ редактор. (Я использую Ladik's MPQ Editor v3.6.0).
  2. Любой аудио-конвертер, который умеет в wav.
  3. War3 Model Editor (Я использую 1.07).
  4. Любой редактор, который умеет работу с таблицами, например Microsoft Excel.

Выбор модели и анимаций.

Здесь вы можете выбрать любую модель, но я рассмотрю на примере своей модели Военачальника Горианской Империи. Сразу определимся к каким анимациям мы хотим прикрепить звуки. Я выбрал Attack, Attack 2, Attack 3, Attack Slam, Death.

Выбор звуков и конвертирование их в корректный формат.

Для анимаций Attack, Attack 2, Attack 3, я выбрал:
OgreNewAttackEffort1
OgreNewAttackEffort2
Для анимации Attack Slam, я выбрал:
OgreNewCriticalAttack1
Для анимации Death, я выбрал:
OgreNewDeath1
Важно: Для того, чтобы звук воспроизводился в игре корректно и вообще воспроизводился, нужно обязательно сконвертировать в wav:
  1. Sample rate: 22 050 Частота дискретизации
  2. Bit Depth: 16 Битрейт
  3. Channels: Mono аудио-каналы

Работа с таблицами AnimLookups.slk и AnimSounds.slk

С помощью MPQ редактора, мы открываем war3x.mpq до 1.29 включительно, я прикрепил таблицы к статье для тех, у кого 1.30 и выше. Проходим по пути UI\SoundInfo\ и экспортируем файлы: AnimLookups.slk и AnimSounds.slk.

Открываем AnimLookups.slk

Видим три столбца:
AnimSoundEvent, SoundLabel, InBeta.
  1. AnimSoundEvent - здесь вводим 4-х значный идентификатор. Придумываем любой, но отличный от уже существующих. Я выбрал MNR1, MNR2, MNR3 (MNR сократил мой ник Monoroh :))
  2. SoundLabel - здесь что-то вроде описания того, какой звук будет воспроизводиться. Можно написать все, что угодно, но рекомендую писать под название анимаций, для которых этот звук будет воспроизводиться, чтобы самим не запутаться. Я выбрал OgreNewDeath, OgreNewAttack, OgreNewCriticalAttack.
  3. InBeta - от него ничего не зависит, я так полагаю это идентификатор версий. Я везде проставил 1.
На выходе получается вот такая табличка:
AnimSoundEventSoundLabelInBeta
MNR1 OgreNewDeath 1
MNR2 OgreNewAttack 1
MNR3 OgreNewCriticalAttack 1
Сохраняем, закрываем.

Открываем AnimSounds.slk

  1. Опускаемся в самый низ и в первый столбец (SoundName) вводим значение столбца SoundLabel из таблицы AnimLookups.slk. Соответственно это будет OgreNewDeath, OgreNewAttack, OgreNewCriticalAttack.
  2. Во второй столбец FileNames вписываем название аудиофайла, который будет воспроизводиться. Соответственно: OgreNewDeath1.wav; OgreNewAttackEffort1.wav,OgreNewAttackEffort2.wav; OgreNewCriticalAttack1.wav. Обратите внимание, что в строку OgreNewAttack, во второй столбец мы вписали два звука OgreNewAttackEffort1.wav,OgreNewAttackEffort2.wav через запятую. Это значит, что при воспроизведении анимаций атак, мы будет слышать либо первый, либо второй звук (рандомно).
  3. В третий столбец DirectoryBase мы прописываем путь, где буду находиться наши звуки. Я выбрал Units\Creeps\OgreNew.
  4. Остальные столбцы я заполнял по образцу соответствующих стандартных звуков. Например для OgreNewDeath я взял значения стандартного звука смерти Огра OgreDeath, а для OgreNewAttackEffort1.wav, OgreNewAttackEffort2.wav, OgreNewCriticalAttack1.wav я взял значения звуков атак Повелителя зверей BeastmasterAttack. Параметры очень гибкие, например можно отстроить дистанцию слышимости, изменяя параметры столбцов MinDistance, MaxDistance, DistanceCutoff, но я решил не импровизировать и оставить стандартные значения Blizzard.
На выходе получается такая табличка:
SoundNameFileNamesDirectoryBase
OgreNewDeath OgreNewDeath1.wav Units\Creeps\OgreNew
OgreNewAttack OgreNewAttackEffort1.wav,OgreNewAttackEffort2.wav Units\Creeps\OgreNew
OgreNewCriticalAttack OgreNewCriticalAttack1.wav Units\Creeps\OgreNew
» Остальные столбцы
Сохраняем, закрываем.

Присоединение звуков к анимациям.

Итак, приступаем к самому вкусному, а именно присоединение звуков к анимациям. Делать мы это будем в War3 Model Editor'е. Но сначала подготовим его.
Идем в директорию, куда вы распаковали War3 Model Editor. Заходим в папку Data и там с помощью любого текстового редактора открываем файл SoundData. Спускаемся в самый низ и дописываем строчки:
MNR1 OgreNewDeath
MNR2 OgreNewAttack
MNR3 OgreNewCriticalAttack
Сохраняем, закрываем.
Для чего эти манипуляции?...
Дело в том, что War3 Model Editor берет значения идентификаторов звуков не из таблиц как нам всем казалось и хотелось AnimLookups и AnimSounds, которые благополучно лежат в файлах игры, а как раз таки из этого SoundData файла. Проще говоря, если бы мы не добавили эти строчки в SoundData, то War3 Model Editor не увидел бы наши новые значения.

Ключевые кадры

Теперь открываем War3 Model Editor.
File>Open>Наша модель.mdx.
Теперь нам нужны ключевые кадры анимаций, с которых будет воспроизводиться звук. Для этого идем в Windows > Sequence Manager. Открывается список анимаций. Делаем двойной клик по анимации Attack. Открывается окно Sequence: Запоминаем значение графы From:
Так же проделываем для анимаций Attack 2, Attack 3, Attack Slam, Death.
Вот мы получили значения нужных нам кадров.

Привязка

Далее идем во вкладку Windows>Node Manager.
Перед нами список костей. Все событийные объекты привязываются к главной кости. Часто эти кости называются по-разному. Например bone root, root и т.д. В нашей модели это кость bone_b0 .
Кликаем на bone_b0 правой кнопкой мыши, и жмякаем Create Event Object. Появился объект под названием UNNAMED.
Кликаем по нему два раза, или правой кнопкой мыши>Edit . Открывается окно:
Правый клик по области Event Tracks > Create New.
Открывается окошко Enter a Track Time. В него мы вводим номер кадра, с которого будет воспроизводиться наш звук. Соответственно для анимации Attack вводим значение 74195.
Type оставляем SND (Sound).
Data разворачиваем список и ищем MNR2 - OgreNewAttack. либо в строку ниже вводим MNRH2
Т.к. анимации Attack 2 и Attack 3 будут воспроизводить те же звуки, что и анимация Attack, то мы сюда же добавляем значения анимаций Attack 2, Attack 3. По итогу должно получиться вот так:
Жмем Ок и видим наш объект. Вот, собственно, мы и добавили звуки атак :)
Так же проделываем и для остальных анимаций:
Attack Slam
Death
Итог. Объекты переименовались в тип объекта x идентификатор.
Сохраняем модель. File > Save
Добавление звуков закончено. Осталось только правильно импортировать в игру.

Импорт в игру

Способы:

Осталось дело за малым. Импортировать в игру. Выделю несколько способов:
  1. Добавить в архив war3x.mpq с заменой где нужно. до 1.29 включительно
  2. Добавить в карту.
  3. Создать отдельный архив war3mod.mpq и закинуть туда, не заменяя стандартные файлы. до 1.29 включительно

Пути импорта:

» Для таблиц:
UI\SoundInfo\AnimLookups.slk
UI\SoundInfo\AnimSounds.slk
» Для звуков:
Units\Creeps\OgreNew\OgreNewAttackEffort1.wav
Units\Creeps\OgreNew\OgreNewAttackEffort2.wav
Units\Creeps\OgreNew\OgreNewCriticalAttack1.wav
Units\Creeps\OgreNew\OgreNewDeath1.wav
» Для модели и текстур:
Убрать war3imported из пути.

Заключение

Вот мы и научились прикреплять нестандартные звуки к анимациям :).
Спасибо за внимание! :)

Просмотров: 879

Komkozavr #1 - 8 месяцев назад -16
Э. Зачем это?

Но статья хорошая. Хоть одна качественная и полезная статья появилась в библиотеке статей xgm.
Свиборг #2 - 8 месяцев назад 2
Хорошая статья!
Кстати, Sound Data править совсем не обязательно, достаточно просто забить ИД звука вручную в графу EventData. Ещё можно написать, что в AnimSounds есть интересные параметры priority (приоритет звука над другими, например при более высокой priority для звука смерти он будет заглушать звуки выстрелов и наоборот) и Volume - уровень громкости, правда, там сильно увеличить громкость не получится.
Lame Stallion #3 - 6 месяцев назад (отредактировано ) 0
Все вроде сделал по аналогии, но звук в игре не проигрывается. Звук, правда, взят не из Варкрафта, а из другой игры, может, это в нем проблема - он даже по триггеру не проигрывается в позиционном режиме, только в обычном (хотя я заредачил его в wav со всеми указанными параметрами). Или это я ошибся с редактированием файлов. Хелпаните, плеаз. Параметр звука в Model editor (SoundData) - GGSS GnollShot. В таблицах введен в самом низу.
UPD. По триггеру позиционно (в 3D-формате) заработал нормально, надо было только поднять с нуля значение минимальной дистанции. Несмотря на то, что в AnimSounds у него стоит 600, при анимации выстрела все равно тишина. Значит, проблема не со звуком, а с моими руками. Кто поможет - пришлю ведро чая.
прикреплены файлы
Monoroh #4 - 6 месяцев назад 0
Lame Stallion:
Все вроде сделал по аналогии, но звук в игре не проигрывается. Звук, правда, взят не из Варкрафта, а из другой игры, может, это в нем проблема - он даже по триггеру не проигрывается в позиционном режиме, только в обычном (хотя я заредачил его в wav со всеми указанными параметрами). Или это я ошибся с редактированием файлов. Хелпаните, плеаз. Параметр звука в Model editor (SoundData) - GGSS GnollShot. В таблицах введен в самом низу.
UPD. По триггеру позиционно (в 3D-формате) заработал нормально, надо было только поднять с нуля значение минимальной дистанции. Несмотря на то, что в AnimSounds у него стоит 600, при анимации выстрела все равно тишина. Значит, проблема не со звуком, а с моими руками. Кто поможет - пришлю ведро чая.
Привет. Ты не добавил в Node Manager Event Object с этим звуком :)
Попробуй.
прикреплены файлы
8gabriel8 #5 - 6 месяцев назад 0
Monoroh, он его прикрепил выше к Bone_Hand_L. Пробовал поставить, как обычно и много других изменений, но не воспроизводился звук.