English version (link)ВведениеВ этой статье я покажу, как добавлять новое оружие и звуки для него в стандартную GTA IV (не эпизоды) без использования плагинов. Я буду добавлять только одно оружие, используя имя "w_revolver" и "revolver". Предположим, что вы уже имеете необходимые ассеты в игровом формате.
Что вам понадобится- Модель, текстуры и коллизия оружия
- Звуки оружия
- Программа для открытия IMG-архивов и создания RPF-архивов
- Текстовый редактор
- Генератор игровых хэшей
-
RAGEAT + IVAudioConv-
GTAAudioMetadataToolСсылка для скачивания GTAAudioMetadataTool:
GTAAudioMetadataTool.zip [1,78 Mb] (cкачиваний: 1)Какие файлы добавляются и используются- w_revolver.wdr (модель)
- w_revlover.wtd (текстуры)
- w_revolver.wbd (коллизия)
- common/data/default.ide
- common/data/WeaponInfo.xml
- pc/audio/sfx/revolver.rpf (звуки оружия)
- pc/audio/config/game.dat16
- pc/audio/config/sounds.dat15
- pc/audio/config/rpf.xml
- pc/audio/config/waveslots.xml
- gun@revolver.wad (анимации для игрока)
- common/data/animgrp.dat
Модель оружия, текстуры оружия и коллизия оружияВам необходимо добавить модель оружия (wdr), текстуры оружия (wtd) и коллизию оружия (wbd) в img-архив, который будет загружен игрой.
Определение оружияОткройте следующий файл: common/data/default.ide
Найдите в этом файле секцию "weap" и добавьте в нее следующую строку:
w_revolver, w_revolver, gun@revolver, 1, 30, 0
Секция "weap" отвечает за определение оружия.
w_revolver, w_revolver - имя wdr и wtd соответственно
gun@revolver - имя анимационного файла
Затем, найдите секцию "amat" и добавьте туда следующую строку:
w_revolver, 0, CM_WEAPONS_PISTOL
Секция "amat" отвечает за звуковые столкновения оружия.
CM_WEAPONS_PISTOL - имя метаданных из game.dat16
Настройка параметров оружияОткройте следующий файл: common/data/WeaponInfo.xml
Следуя структуре файла, нам необходимо добавить туда информацию о новом оружии. Обратите внимание на этот пример:
<weapon type="EPISODIC_1">
<data slot="HANDGUN" firetype="INSTANT_HIT" damagetype="BULLET" group="PISTOL_LARGE" targetrange="45.0" weaponrange="50.0" clipsize="6" ammomax="1500" timebetweenshots="333">
<damage base="40" networkplayermod="4.0" networkpedmod="1.0"/>
<physics force="75.0"/>
<reload time="2000" fasttime="2000" crouchtime="2000"/>
<aiming accuracy="0.5">
<offset x="0.15" y="1.0" z="0.55"/>
<crouchedoffset x="0.2" y="1.0" z="0.05"/>
<reticule standing="0.6" ducked="0.5" scale="0.3"/>
</aiming>
<pickup regentime="240000" ammoonstreet="30"/>
<controller>
<rumble duration="150" intensity="0.1"/>
</controller>
<flags>
<flag>GUN</flag>
<flag>CAN_AIM</flag>
<flag>CAN_FREE_AIM</flag>
<flag>ANIM_RELOAD</flag>
<flag>ANIM_CROUCH_FIRE</flag>
</flags>
</data>
<assets model="w_revolver">
<anim group="gun@revolver" meleegroup1="firearm_core"/>
<effects>
<muzzle fx="muz_pistol_large"/>
<shell fx="weap_ejected_pistol"/>
</effects>
</assets>
</weapon>
EPISODIC_1 - тип оружия, который указан в первой строке. Вы можете использовать другой тип, например, EPISODIC_2 или EPISODIC_3. Самый последний свободный такой тип - EPISODIC_24. Таким образом, используя "EPISODIC_", вы можете добавить 24 типа нового оружия в стандартную игру.
Новые звуки для оружияВ папке с игрой, откройте следующую папку: pc/audio/sfx. Создайте в ней архив в формате rpf (например, с помощью OpenIV). В этом архиве создайте папку с таким же названием, как и архив (но без расширения). В этой статье я буду использовать название MYWEAPONS.
После этого, перейдите в папку с утилитой RAGEAT. В этой папке создайте текстовый файл со следующим названием и расширением: MYWEAPONS_REVOLVER.oaf. После этого, создайте папку под названием MYWEAPONS_files.
Поместите в папку MYWEAPONS_files ваши звуки для оружия. Учтите, что каждый звук выстрела в игре разделен на два аудиофайла, которые относятся к левому и правому каналу. Я буду использовать следующие названия аудиофайлов для звука выстрела: REVOLVER_SHOT1_L.wav и REVOLVER_SHOT1_R.wav.
Теперь откройте файл MYWEAPONS_REVOLVER.oaf в текстовом редакторе и добавьте туда следующие строки:
{
"isStream": false,
"audioCount": 2,
"animCount": 0,
"entries": [
{
"name": "PISTOL_SHOT1_L",
"file": "MYWEAPONS_files\\REVOLVER_SHOT1_L.wav",
"compression": "PCM",
"headroom": -191
},
{
"name": "PISTOL_SHOT1_R",
"file": "MYWEAPONS_files\\REVOLVER_SHOT1_R.wav",
"compression": "PCM",
"headroom": -191
},
]
}
Обратите внимание, что путь к файлу звука указан в значении "file", а в значении "name" указано игровое имя звука, которое будет использоваться игрой в виде хэша. Если вы будете добавлять больше звуков, то не забудьте изменить значение "audioCount".
Сохраняем этот файл и закрываем его.
Перетащите файл MYWEAPONS_REVOLVER.oaf на файл IVAudioConv.exe. Если все пройдет успешно, то будет создан файл под названием MYWEAPONS_REVOLVER, без расширения. Это звуковой банк (sound bank). Поместите его в архив .rpf, а именно в ту папку, которую мы создали там ранее. Должен получится следующий путь: MYWEAPONS.rpf/MYWEAPONS/MYWEAPONS_REVOLVER
Мы закончили с архивом.
Теперь нам нужно сделать так, чтобы игра загрузила созданный архив и звуки в нем. В папке с игрой, откройте следующую папку: pc/audio/config.
Откройте в этой папке файл rpf.xml
Следуя структуре файла, добавьте туда следующие строки:
<Rpf>
<Name>MYWEAPONS</Name>
<Type>rpf</Type>
<Alias>MYWEAPONS</Alias>
</Rpf>
Обратите внимание, что название архива указано в значениях "Name" и "Alias".
Сохраните файл и закройте его.
Теперь откройте в этой же папке файл waveslots.xml (не waveslot_.xml!)
Следуя структуре файла, добавьте туда следующие строки:
<Slot>
<Name content="ascii">MYWEAPONS_REVOLVER</Name>
<MaxHeaderSize value="1024" />
<LoadType content="ascii">BANK</LoadType>
<StaticBank content="ascii">MYWEAPONS\MYWEAPONS_REVOLVER</StaticBank>
<Size value="238592" />
</Slot>
Обратите внимание, что здесь нам нужно указать размер звукового банка MYWEAPONS в байтах в значении "Size value". Чтобы узнать размер этого звукового банка в байтах, вернитесь в папку с RAGEAT, нажмите правой кнопкой мыши по файлу MYWEAPONS и зайдите в свойства файла. Скопируйте значение размера, НЕ используемого на диске. В моем случае это значение будет равно 238,592 байтам. Вам необходимо убрать запятые и добавить свое значение в waveslots.xml, в значение "Size value".
Снова перейдите в папку с RAGEAT. Откройте следующий файл: data/iv_eflc.ini
Здесь находятся строки и хэши к ним, которые используются в звуковых конфигах. Все строки имеют следующий вид: [игровой хэш]=[имя]. Вы можете сгенерировать игровые хэши с помощью генератора игровых хэшей на основе имени (с помощью OpenIV или через другие генераторы в интернете).
Я буду использовать следующую строку в этой статье:
3184660097=XFADE_GUN_TEST_REVOLVER
После того, как вы добавили нужные строки, запустите RAGEAT. Во вкладке Metadata, в списке рабочих файлов, выберите файл game.dat16.
Найдите в загруженном списке "W_GLOCK" с помощью поиска. Пролистав чуть ниже, вы увидите остальные метаданные, связанные со звуками оружия.
Выберите один из этих метаданных, затем нажмите правую кнопку мыши и выберите Duplicate. Будет создан дубликат этих метаданных. Выберите этот дубликат.
Перейдем к правому окну программы. Переименуйте название этих метаданных в соответствии с названием модели вашего оружия. Здесь это будет W_REVOLVER
Затем, перейдем к Hex view. Наведите курсор на розовые ячейки, затем найдите те ячейки, которые имеют следующий префикс: XFADE_GUN_TEST_
Один раз нажмите на самую первую ячейку, которая относится к этому названию. После этого, в самом внизу программы, вы увидите поле "Hash", которое будет иметь префикс XFADE_GUN_TEST_. Замените его тем названием, которое вы поместили в iv_eflc.ini.
Помимо вышеупомянутых ячеек, здесь есть другие полезные ячейки, но в этой статье мы разберем только эту.
Нажмите кнопку Save в правом-нижнем углу программы, чтобы сохранить эти метаданные. Затем, в левом-верхнем углу программы, нажмите File->Save, чтобы сохранить изменения в game.dat16.
Мы закончили с RAGEAT.
Скачайте GTAAudioMetadataTool по этой ссылке, если вы этого еще не сделали:
GTAAudioMetadataTool.zip [1,78 Mb] (cкачиваний: 1)Перейдите в папку с утилитой GTAAudioMetadataTool. Переместите в эту папку следующий файл из папки с игрой: pc/audio/config/SOUNDS.DAT15
Запустите to_json.bat в папке GTAAudioMetadataTool. Будет создан текстовый файл с именем SOUNDS.DAT15.json. Откройте его с помощью текстового редактора.
Теперь, следуя структуре файла, нам необходимо добавить необходимые метаданные. Вы можете использовать метаданные из этой статьи как шаблон при добавлении звуков для оружия.
Добавим метаданные, которые относятся к game.dat16:
"XFADE_GUN_TEST_REVOLVER": {
"Type": "audCrossfadeSound",
"Flags": 174762,
"__unk09": 0,
"Header": {
" __field16": 0
},
"Metadata": {
"NearSound": "REVOLVER_FIRE",
"FarSound": "DISTANT_DESERT_EAGLE",
"__field08": 0,
"__field09": 1106247680,
"__field0d": 1119092736,
"__field11": 0,
"VariableHash1": "0x00000000",
"VariableHash2": "0x00000000",
"__field1d": 0,
"VariableHash3": "0x00000000",
"UnkCurvesHash": "0x94ae4add"
}
},
Таким образом, мы указали строку XFADE_GUN_TEST_REVOLVER в game.dat16, и инициализировали метаданные с ее именем в sounds.dat15.
Теперь нам нужно добавить метаданные для значения "NearSound" - REVOLVER_FIRE.
"REVOLVER_FIRE": {
"Type": "audMultitrackSound",
"Flags": 174762,
"__unk09": 0,
"Header": {
"__field0": 65436,
"__field12": 0,
"CategoryHash": "0x49d789a4",
" __field16": 0
},
"Metadata": {
"Tracks": [
{
"TrackHash": "GENERAL_GUNS_EAGLE_DRY",
"__field04": 0
},
{
"TrackHash": "GENERAL_GUNS_EAGLE_LOWS",
"__field04": 0
},
{
"TrackHash": "REVOLVER_SHOT_1",
"__field04": 0
},
{
"TrackHash": "GENERAL_GUNS_EAGLE_SHOT2",
"__field04": 0
},
{
"TrackHash": "EAGLE_TAIL",
"__field04": 0
},
{
"TrackHash": "GUN_SWEETNERS_SINES_EAGLE",
"__field04": 0
},
{
"TrackHash": "EAGLE_SMACK_SOUND",
"__field04": 0
}
]
}
},
Добавляем метаданные для "REVOLVER_SHOT_1":
"REVOLVER_SHOT_1": {
"Type": "audCollapsingStereoSound",
"Flags": 170662,
"__unk09": 0,
"Header": {
"CategoryHash": "0xb9948cea",
" __field16": 0
},
"Metadata": {
"SoundHash1": "GENERAL_GUNS_REVOLVER_SHOT1_L",
"SoundHash2": "GENERAL_GUNS_REVOLVER_SHOT1_R",
"__field08": 3.0,
"__field0c": 5.0,
"VariableHash1": "0x00000000",
"VariableHash2": "0x00000000",
"VariableHash3": "0x00000000",
"VariableHash4": "0x00000000",
"VariableHash5": "0x00000000",
"__field24": 0
}
},
И, наконец, добавляем метаданные для значения "SoundHash1" и "SoundHash2":
"GENERAL_GUNS_REVOLVER_SHOT1_L": {
"Type": "audSimpleSound",
"Flags": 174762,
"__unk09": 0,
"Header": {
" __field16": 0
},
"Metadata": {
"__field00": 0,
"ArchiveHash": "MYWEAPONS.SFX/MYWEAPONS_REVOLVER",
"SoundHash": "0x5f830a0a"
}
},
"GENERAL_GUNS_REVOLVER_SHOT1_R": {
"Type": "audSimpleSound",
"Flags": 174762,
"__unk09": 0,
"Header": {
" __field16": 0
},
"Metadata": {
"__field00": 0,
"ArchiveHash": "MYWEAPONS.SFX/MYWEAPONS_REVOLVER",
"SoundHash": "0x7fc24a88"
}
},
Здесь же, в значениях "SoundHash", нам нужно указать звуковые хэши для левого канала и правого канала аудио. Напомню, что каждый звук выстрела в игре разделен на два аудиофайла, которые относятся к левому и правому каналу.
В данном примере, я использую следующие звуковые хэши для левого и правого канала соответственно:
0x5f830a0a - PISTOL_SHOT1_L
0x7fc24a88 - PISTOL_SHOT1_R
Эти хэши уже существуют в игре и используются для пистолета W_GLOCK. К сожалению, по какой-то причине, в моей игре не работали кастомные хэши, поэтому я использовал существующие для всех новых звуков. Однако, с этим не возникнет проблем, если вы будете использовать эти звуки в разных звуковых банках для каждого оружия.
Мы закончили с SOUNDS.DAT15.json, сохраните изменения.
В этой же папке, запустите to_binary.bat. Будет создан бинарный файл с именем SOUNDS.DAT15.GEN. Переименуйте файл, убрав в конце ".GEN". Файл готов, переместите его обратно в папку с игрой.
Мы закончили с GTAAudioMetadataTool.
Анимации для игрокаЕсли вы используете уже существующую группу анимаций для игрока, то пропустите этот шаг.
Вам необходимо добавить группу анимаций в формате wad в img-архив, который будет загружен игрой. Я буду использовать следующее название: gun@revolver.wad
Теперь нам необходимо указать игре, что gun@revolver - это группа анимаций оружия.
Откройте следующий файл: common/data/animgrp.dat
Найдите в этом файле раздел "WeaponGroups", где добавлены группы анимаций для существующего оружия.
Добавьте там же следующую строку:
WeaponGroup( Streaming, gun@revolver )
Сохраните файл и закройте его.